1 #![allow(missing_docs)]
2 use super::{field, metadata, Parent}
;
7 /// This is intended for use with the mock subscriber API in the
8 /// `subscriber` module.
9 #[derive(Clone, Debug, Default, Eq, PartialEq)]
11 pub(in crate::support
) metadata
: metadata
::Expect
,
14 #[derive(Debug, Default, Eq, PartialEq)]
16 pub(in crate::support
) span
: MockSpan
,
17 pub(in crate::support
) fields
: field
::Expect
,
18 pub(in crate::support
) parent
: Option
<Parent
>,
21 pub fn mock() -> MockSpan
{
28 pub fn named
<I
>(self, name
: I
) -> Self
33 metadata
: metadata
::Expect
{
34 name
: Some(name
.into()),
40 pub fn at_level(self, level
: tracing
::Level
) -> Self {
42 metadata
: metadata
::Expect
{
49 pub fn with_target
<I
>(self, target
: I
) -> Self
54 metadata
: metadata
::Expect
{
55 target
: Some(target
.into()),
61 pub fn with_explicit_parent(self, parent
: Option
<&str>) -> NewSpan
{
62 let parent
= match parent
{
63 Some(name
) => Parent
::Explicit(name
.into()),
64 None
=> Parent
::ExplicitRoot
,
73 pub fn with_contextual_parent(self, parent
: Option
<&str>) -> NewSpan
{
74 let parent
= match parent
{
75 Some(name
) => Parent
::Contextual(name
.into()),
76 None
=> Parent
::ContextualRoot
,
85 pub fn name(&self) -> Option
<&str> {
86 self.metadata
.name
.as_ref().map(String
::as_ref
)
89 pub fn with_field
<I
>(self, fields
: I
) -> NewSpan
91 I
: Into
<field
::Expect
>,
95 fields
: fields
.into(),
100 pub(in crate::support
) fn check_metadata(&self, actual
: &tracing
::Metadata
<'_
>) {
101 self.metadata
.check(actual
, format_args
!("span {}", self));
102 assert
!(actual
.is_span(), "expected a span but got {:?}", actual
);
106 impl fmt
::Display
for MockSpan
{
107 fn fmt(&self, f
: &mut fmt
::Formatter
<'_
>) -> fmt
::Result
{
108 if self.metadata
.name
.is_some() {
109 write
!(f
, "a span{}", self.metadata
)
111 write
!(f
, "any span{}", self.metadata
)
116 impl From
<MockSpan
> for NewSpan
{
117 fn from(span
: MockSpan
) -> Self {
126 pub fn with_explicit_parent(self, parent
: Option
<&str>) -> NewSpan
{
127 let parent
= match parent
{
128 Some(name
) => Parent
::Explicit(name
.into()),
129 None
=> Parent
::ExplicitRoot
,
132 parent
: Some(parent
),
137 pub fn with_contextual_parent(self, parent
: Option
<&str>) -> NewSpan
{
138 let parent
= match parent
{
139 Some(name
) => Parent
::Contextual(name
.into()),
140 None
=> Parent
::ContextualRoot
,
143 parent
: Some(parent
),
148 pub fn with_field
<I
>(self, fields
: I
) -> NewSpan
150 I
: Into
<field
::Expect
>,
153 fields
: fields
.into(),
159 impl fmt
::Display
for NewSpan
{
160 fn fmt(&self, f
: &mut fmt
::Formatter
<'_
>) -> fmt
::Result
{
161 write
!(f
, "a new span{}", self.span
.metadata
)?
;
162 if !self.fields
.is_empty() {
163 write
!(f
, " with {}", self.fields
)?
;