|  | //! Structured data associated with `Span`s and `Event`s. | 
|  | pub use tracing_core::field::*; | 
|  |  | 
|  | use crate::Metadata; | 
|  |  | 
|  | /// Trait implemented to allow a type to be used as a field key. | 
|  | /// | 
|  | /// **Note**: Although this is implemented for both the [`Field`] type *and* any | 
|  | /// type that can be borrowed as an `&str`, only `Field` allows _O_(1) access. | 
|  | /// Indexing a field with a string results in an iterative search that performs | 
|  | /// string comparisons. Thus, if possible, once the key for a field is known, it | 
|  | /// should be used whenever possible. | 
|  | /// | 
|  | /// [`Field`]: ./struct.Field.html | 
|  | pub trait AsField: crate::sealed::Sealed { | 
|  | /// Attempts to convert `&self` into a `Field` with the specified `metadata`. | 
|  | /// | 
|  | /// If `metadata` defines this field, then the field is returned. Otherwise, | 
|  | /// this returns `None`. | 
|  | fn as_field(&self, metadata: &Metadata<'_>) -> Option<Field>; | 
|  | } | 
|  |  | 
|  | // ===== impl AsField ===== | 
|  |  | 
|  | impl AsField for Field { | 
|  | #[inline] | 
|  | fn as_field(&self, metadata: &Metadata<'_>) -> Option<Field> { | 
|  | if self.callsite() == metadata.callsite() { | 
|  | Some(self.clone()) | 
|  | } else { | 
|  | None | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | impl<'a> AsField for &'a Field { | 
|  | #[inline] | 
|  | fn as_field(&self, metadata: &Metadata<'_>) -> Option<Field> { | 
|  | if self.callsite() == metadata.callsite() { | 
|  | Some((*self).clone()) | 
|  | } else { | 
|  | None | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | impl AsField for str { | 
|  | #[inline] | 
|  | fn as_field(&self, metadata: &Metadata<'_>) -> Option<Field> { | 
|  | metadata.fields().field(&self) | 
|  | } | 
|  | } | 
|  |  | 
|  | impl crate::sealed::Sealed for Field {} | 
|  | impl<'a> crate::sealed::Sealed for &'a Field {} | 
|  | impl crate::sealed::Sealed for str {} |