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_non_null()
15 }
16
17 pub fn pop_outermost_list_wrapping(&mut self) -> Option<ListWrapping> {
18 let end = self.inner.get_list_length();
19 if end == 0 {
20 return None;
21 }
22 let bit_mask = 1u16 << (end - 1);
24 let list_wrapping = if self.inner.0 & bit_mask != 0 {
25 Some(ListWrapping::ListNonNull)
26 } else {
27 Some(ListWrapping::List)
28 };
29 self.inner.set_list_length(end - 1);
30 list_wrapping
31 }
32
33 pub fn push_outermost_list_wrapping(&mut self, list_wrapping: ListWrapping) {
34 self.inner = match list_wrapping {
35 ListWrapping::ListNonNull => self.inner.list_non_null(),
36 ListWrapping::List => self.inner.list(),
37 };
38 }
39}
40
41impl From<MutableWrapping> for Wrapping {
42 fn from(wrapping: MutableWrapping) -> Self {
43 wrapping.inner
44 }
45}
46
47impl From<Wrapping> for MutableWrapping {
48 fn from(inner: Wrapping) -> Self {
49 Self { inner }
50 }
51}