docsplay: doc comments - Displayed
This library is a fork of displaydoc that provides a
convenient derive macro for the standard library's core::fmt::Display trait.
[]
= "0.1"
Compiler support: requires rustc 1.56+
Example
Demonstration alongside the Error derive macro from thiserror,
to propagate source locations from io::Error with the #[source] attribute:
use io;
use Display;
use Error;
let error = Redaction;
assert!;
Note that although io::Error implements Display, we do not add it to the
generated message for DataStoreError::Disconnect, since it is already made available via
#[source]. See further context on avoiding duplication in error reports at the rust blog
here.
Details
- A
fmt::Displayimpl is generated for your enum if you provide a docstring comment on each variant as shown above in the example. TheDisplayderive macro supports a shorthand for interpolating fields from the error:/// {var}⟶write!("{}", self.var)/// {0}⟶write!("{}", self.0)/// {var:?}⟶write!("{:?}", self.var)/// {0:?}⟶write!("{:?}", self.0)/// {0.foo()}⟶write!("{}", self.0.foo())/// {0.foo():?}⟶write!("{:?}", self.0.foo())
- This also works with structs and generic types:
/// oh no, an error: {0}
;
let error: = Error;
assert!;
-
Two optional attributes can be added to your types next to the derive:
-
#[ignore_extra_doc_attributes]makes the macro ignore any doc comment attributes (or///lines) after the first. -
#[prefix_enum_doc_attributes]combines the doc comment message on your enum itself with the messages for each variant, in the formatenum: variant. When added to an enum, the doc comment on the enum becomes mandatory. When added to any other type, it has no effect.
-
-
In case you want to have an independent doc comment, the
#[display("...")attribute may be used on the variant or struct to override it.
FAQ
-
Is this crate
no_stdcompatible?- Yes! This crate implements the
core::fmt::Displaytrait, not thestd::fmt::Displaytrait, so it should work instdandno_stdenvironments. Just adddefault-features = false.
- Yes! This crate implements the
-
Does this crate work with
PathandPathBufvia theDisplaytrait?- Yuuup. This crate uses @dtolnay's autoref specialization technique
to add a special trait for types to get the display impl. It then specializes for
PathandPathBuf, and when either of these types are found, it callsself.display()to get astd::path::Display<'_>type which can be used with theDisplayformat specifier!
- Yuuup. This crate uses @dtolnay's autoref specialization technique
to add a special trait for types to get the display impl. It then specializes for