Skip to main content

substrate_data/schema/reader/
expected.rs

1//! [`Expected`]: what a field takes, as a reader's "expected …" problem
2//! says it.
3
4use std::fmt;
5
6/// What a field takes, for the "expected …, found …" problem.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[non_exhaustive]
9pub enum Expected {
10    /// `true` or `false`.
11    Bool,
12    /// An integer.
13    Integer,
14    /// An integer that isn't negative.
15    Unsigned,
16    /// A number.
17    Number,
18    /// A string.
19    Str,
20    /// Text (a string, or a typed value's spelling).
21    Text,
22    /// A list.
23    List,
24    /// An object.
25    Object,
26    /// `{ ok }` or `{ err }`.
27    OkOrErr,
28    /// A reference `@kind:id`.
29    Reference,
30    /// Bytes.
31    Bytes,
32    /// A name (an enum's variant).
33    Name,
34    /// A 128-bit id in hex.
35    Uid,
36    /// A list of exactly this many items.
37    Items(usize),
38}
39
40impl fmt::Display for Expected {
41    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42        match self {
43            Expected::Bool => f.write_str("true or false"),
44            Expected::Integer => f.write_str("an integer"),
45            Expected::Unsigned => f.write_str("an unsigned integer"),
46            Expected::Number => f.write_str("a number"),
47            Expected::Str => f.write_str("a string"),
48            Expected::Text => f.write_str("text"),
49            Expected::List => f.write_str("a list"),
50            Expected::Object => f.write_str("an object"),
51            Expected::OkOrErr => f.write_str("{ ok } or { err }"),
52            Expected::Reference => f.write_str("a reference `@kind:id`"),
53            Expected::Bytes => f.write_str("bytes"),
54            Expected::Name => f.write_str("a name"),
55            Expected::Uid => f.write_str("32 hex digits"),
56            Expected::Items(n) => write!(f, "a list of {n}"),
57        }
58    }
59}