graphql_wrapping_types/
mutable.rs1use crate::{ListWrapping, Wrapping};
2
3#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
4pub struct MutableWrapping {
5 pub(super) inner: Wrapping,
6}
7
8impl MutableWrapping {
9 pub fn is_nullable(&self) -> bool {
10 self.inner.is_nullable()
11 }
12
13 pub fn is_required(&self) -> bool {
14 self.inner.is_required()
15 }
16
17 pub fn write_type_string(&self, name: &str, formatter: &mut dyn std::fmt::Write) -> Result<(), std::fmt::Error> {
18 self.inner.write_type_string(name, formatter)
19 }
20
21 pub fn pop_outermost_list_wrapping(&mut self) -> Option<ListWrapping> {
22 let end = self.inner.get_list_length();
23 if end == 0 {
24 return None;
25 }
26 self.inner.set_list_length(end - 1);
27 let bit_mask = 1u16 << (end - 1);
29 if self.inner.0 & bit_mask != 0 {
30 Some(ListWrapping::RequiredList)
31 } else {
32 Some(ListWrapping::NullableList)
33 }
34 }
35
36 pub fn push_outermost_list_wrapping(&mut self, list_wrapping: ListWrapping) {
37 self.inner = match list_wrapping {
38 ListWrapping::RequiredList => self.inner.list_non_null(),
39 ListWrapping::NullableList => self.inner.list(),
40 };
41 }
42}
43
44impl From<MutableWrapping> for Wrapping {
45 fn from(wrapping: MutableWrapping) -> Self {
46 wrapping.inner
47 }
48}
49
50impl From<Wrapping> for MutableWrapping {
51 fn from(inner: Wrapping) -> Self {
52 Self { inner }
53 }
54}