xsd_types/lexical/
boolean.rs1use super::lexical_form;
2use std::borrow::{Borrow, ToOwned};
3use std::cmp::Ordering;
4use std::fmt;
5use std::hash::{Hash, Hasher};
6
7lexical_form! {
8 ty: Boolean,
12
13 buffer: BooleanBuf,
17
18 new,
23
24 new_unchecked,
30
31 value: crate::Boolean,
32 error: InvalidBoolean,
33 as_ref: as_boolean,
34 parent_forms: {}
35}
36
37impl Boolean {
38 pub fn value(&self) -> crate::Boolean {
39 crate::Boolean(matches!(&self.0, b"true" | b"1"))
40 }
41}
42
43impl PartialEq for Boolean {
44 fn eq(&self, other: &Self) -> bool {
45 self.value() == other.value()
46 }
47}
48
49impl Eq for Boolean {}
50
51impl Hash for Boolean {
52 fn hash<H: Hasher>(&self, state: &mut H) {
53 self.value().hash(state)
54 }
55}
56
57impl Ord for Boolean {
58 fn cmp(&self, other: &Self) -> Ordering {
59 self.value().cmp(&other.value())
60 }
61}
62
63impl PartialOrd for Boolean {
64 fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
65 Some(self.cmp(other))
66 }
67}
68
69impl From<bool> for BooleanBuf {
70 fn from(b: bool) -> Self {
71 if b {
72 unsafe { BooleanBuf::new_unchecked(vec![b't', b'r', b'u', b'e']) }
73 } else {
74 unsafe { BooleanBuf::new_unchecked(vec![b'f', b'a', b'l', b's', b'e']) }
75 }
76 }
77}
78
79impl<'a> From<&'a Boolean> for crate::Boolean {
80 fn from(b: &'a Boolean) -> crate::Boolean {
81 b.value()
82 }
83}
84
85impl From<BooleanBuf> for crate::Boolean {
86 fn from(b: BooleanBuf) -> crate::Boolean {
87 b.value()
88 }
89}
90
91impl<'a> From<&'a Boolean> for bool {
92 fn from(b: &'a Boolean) -> bool {
93 b.value().into()
94 }
95}
96
97impl From<BooleanBuf> for bool {
98 fn from(b: BooleanBuf) -> bool {
99 b.value().into()
100 }
101}
102
103fn check_bytes(s: &[u8]) -> bool {
104 matches!(s, b"true" | b"false" | b"0" | b"1")
105}