Enum dynamic_graphql::MaybeUndefined 
source · pub enum MaybeUndefined<T> {
    Undefined,
    Null,
    Value(T),
}Expand description
Similar to Option, but it has three states, undefined, null and x.
Reference: https://spec.graphql.org/October2021/#sec-Null-Value
Examples
use async_graphql::*;
struct Query;
#[Object]
impl Query {
    async fn value1(&self, input: MaybeUndefined<i32>) -> i32 {
        if input.is_null() {
            1
        } else if input.is_undefined() {
            2
        } else {
            input.take().unwrap()
        }
    }
}
let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
let query = r#"
    {
        v1:value1(input: 99)
        v2:value1(input: null)
        v3:value1
    }"#;
assert_eq!(
    schema.execute(query).await.into_result().unwrap().data,
    value!({
        "v1": 99,
        "v2": 1,
        "v3": 2,
    })
);Variants§
Implementations§
source§impl<T> MaybeUndefined<T>
 
impl<T> MaybeUndefined<T>
sourcepub const fn is_undefined(&self) -> bool
 
pub const fn is_undefined(&self) -> bool
Returns true if the MaybeUndefined<T> is undefined.
sourcepub const fn value(&self) -> Option<&T>
 
pub const fn value(&self) -> Option<&T>
Borrow the value, returns None if the the MaybeUndefined<T> is
undefined or null, otherwise returns Some(T).
sourcepub const fn as_opt_ref(&self) -> Option<Option<&T>>
 
pub const fn as_opt_ref(&self) -> Option<Option<&T>>
Converts the MaybeUndefined<T> to Option<Option<T>>.
sourcepub fn as_opt_deref<U>(&self) -> Option<Option<&U>>where
    T: Deref<Target = U>,
    U: ?Sized,
 
pub fn as_opt_deref<U>(&self) -> Option<Option<&U>>where
    T: Deref<Target = U>,
    U: ?Sized,
Converts the MaybeUndefined<T> to Option<Option<&U>>.
sourcepub fn contains_value<U>(&self, x: &U) -> boolwhere
    U: PartialEq<T>,
 
pub fn contains_value<U>(&self, x: &U) -> boolwhere
    U: PartialEq<T>,
Returns true if the MaybeUndefined<T> contains the given value.
sourcepub fn contains<U>(&self, x: &Option<U>) -> boolwhere
    U: PartialEq<T>,
 
pub fn contains<U>(&self, x: &Option<U>) -> boolwhere
    U: PartialEq<T>,
Returns true if the MaybeUndefined<T> contains the given nullable
value.
sourcepub fn map<U, F>(self, f: F) -> MaybeUndefined<U>where
    F: FnOnce(Option<T>) -> Option<U>,
 
pub fn map<U, F>(self, f: F) -> MaybeUndefined<U>where
    F: FnOnce(Option<T>) -> Option<U>,
Maps a MaybeUndefined<T> to MaybeUndefined<U> by applying a function
to the contained nullable value
sourcepub fn map_value<U, F>(self, f: F) -> MaybeUndefined<U>where
    F: FnOnce(T) -> U,
 
pub fn map_value<U, F>(self, f: F) -> MaybeUndefined<U>where
    F: FnOnce(T) -> U,
Maps a MaybeUndefined<T> to MaybeUndefined<U> by applying a function
to the contained value
sourcepub fn update_to(self, value: &mut Option<T>)
 
pub fn update_to(self, value: &mut Option<T>)
Update value if the MaybeUndefined<T> is not undefined.
Example
use async_graphql::MaybeUndefined;
let mut value = None;
MaybeUndefined::Value(10i32).update_to(&mut value);
assert_eq!(value, Some(10));
MaybeUndefined::Undefined.update_to(&mut value);
assert_eq!(value, Some(10));
MaybeUndefined::Null.update_to(&mut value);
assert_eq!(value, None);source§impl<T, E> MaybeUndefined<Result<T, E>>
 
impl<T, E> MaybeUndefined<Result<T, E>>
sourcepub fn transpose(self) -> Result<MaybeUndefined<T>, E>
 
pub fn transpose(self) -> Result<MaybeUndefined<T>, E>
Transposes a MaybeUndefined of a Result into a Result of a
MaybeUndefined.
MaybeUndefined::Undefined will be mapped to
Ok(MaybeUndefined::Undefined). MaybeUndefined::Null
will be mapped to Ok(MaybeUndefined::Null).
MaybeUndefined::Value(Ok(_)) and
MaybeUndefined::Value(Err(_)) will be mapped to
Ok(MaybeUndefined::Value(_)) and Err(_).
Trait Implementations§
source§impl<T> Clone for MaybeUndefined<T>where
    T: Clone,
 
impl<T> Clone for MaybeUndefined<T>where
    T: Clone,
source§fn clone(&self) -> MaybeUndefined<T>
 
fn clone(&self) -> MaybeUndefined<T>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl<T> Debug for MaybeUndefined<T>where
    T: Debug,
 
impl<T> Debug for MaybeUndefined<T>where
    T: Debug,
source§impl<T> Default for MaybeUndefined<T>
 
impl<T> Default for MaybeUndefined<T>
source§fn default() -> MaybeUndefined<T>
 
fn default() -> MaybeUndefined<T>
source§impl<'de, T> Deserialize<'de> for MaybeUndefined<T>where
    T: Deserialize<'de>,
 
impl<'de, T> Deserialize<'de> for MaybeUndefined<T>where
    T: Deserialize<'de>,
source§fn deserialize<D>(
    deserializer: D
) -> Result<MaybeUndefined<T>, <D as Deserializer<'de>>::Error>where
    D: Deserializer<'de>,
 
fn deserialize<D>(
    deserializer: D
) -> Result<MaybeUndefined<T>, <D as Deserializer<'de>>::Error>where
    D: Deserializer<'de>,
source§impl<T> FromValue for MaybeUndefined<T>where
    T: FromValue,
 
impl<T> FromValue for MaybeUndefined<T>where
    T: FromValue,
fn from_value(value: Result<ValueAccessor<'_>>) -> Result<Self>
source§impl<T: GetInputTypeRef<Output = TypeRefInner>> GetInputTypeRef for MaybeUndefined<T>
 
impl<T: GetInputTypeRef<Output = TypeRefInner>> GetInputTypeRef for MaybeUndefined<T>
source§impl<T> Hash for MaybeUndefined<T>where
    T: Hash,
 
impl<T> Hash for MaybeUndefined<T>where
    T: Hash,
source§impl<T> InputType for MaybeUndefined<T>where
    T: InputType,
 
impl<T> InputType for MaybeUndefined<T>where
    T: InputType,
§type RawValueType = <T as InputType>::RawValueType
 
type RawValueType = <T as InputType>::RawValueType
source§fn qualified_type_name() -> String
 
fn qualified_type_name() -> String
source§fn create_type_info(registry: &mut Registry) -> String
 
fn create_type_info(registry: &mut Registry) -> String
source§fn parse(
    value: Option<ConstValue>
) -> Result<MaybeUndefined<T>, InputValueError<MaybeUndefined<T>>>
 
fn parse(
    value: Option<ConstValue>
) -> Result<MaybeUndefined<T>, InputValueError<MaybeUndefined<T>>>
Value. None represents undefined.source§fn to_value(&self) -> ConstValue
 
fn to_value(&self) -> ConstValue
Value for introspection.source§fn as_raw_value(
    &self
) -> Option<&<MaybeUndefined<T> as InputType>::RawValueType>
 
fn as_raw_value(
    &self
) -> Option<&<MaybeUndefined<T> as InputType>::RawValueType>
source§impl<T> Ord for MaybeUndefined<T>where
    T: Ord,
 
impl<T> Ord for MaybeUndefined<T>where
    T: Ord,
source§fn cmp(&self, other: &MaybeUndefined<T>) -> Ordering
 
fn cmp(&self, other: &MaybeUndefined<T>) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
    Self: Sized,
 
fn max(self, other: Self) -> Selfwhere
    Self: Sized,
source§impl<T> PartialEq<MaybeUndefined<T>> for MaybeUndefined<T>where
    T: PartialEq<T>,
 
impl<T> PartialEq<MaybeUndefined<T>> for MaybeUndefined<T>where
    T: PartialEq<T>,
source§fn eq(&self, other: &MaybeUndefined<T>) -> bool
 
fn eq(&self, other: &MaybeUndefined<T>) -> bool
self and other values to be equal, and is used
by ==.source§impl<T> PartialOrd<MaybeUndefined<T>> for MaybeUndefined<T>where
    T: PartialOrd<T>,
 
impl<T> PartialOrd<MaybeUndefined<T>> for MaybeUndefined<T>where
    T: PartialOrd<T>,
source§fn partial_cmp(&self, other: &MaybeUndefined<T>) -> Option<Ordering>
 
fn partial_cmp(&self, other: &MaybeUndefined<T>) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
 
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read moresource§impl<T> Register for MaybeUndefined<T>where
    T: Register + 'static,
 
impl<T> Register for MaybeUndefined<T>where
    T: Register + 'static,
source§impl<T> Serialize for MaybeUndefined<T>where
    T: Serialize,
 
impl<T> Serialize for MaybeUndefined<T>where
    T: Serialize,
source§fn serialize<S>(
    &self,
    serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
    S: Serializer,
 
fn serialize<S>(
    &self,
    serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
    S: Serializer,
impl<T> Copy for MaybeUndefined<T>where
    T: Copy,
impl<T> Eq for MaybeUndefined<T>where
    T: Eq,
impl<T> StructuralEq for MaybeUndefined<T>
impl<T> StructuralPartialEq for MaybeUndefined<T>
Auto Trait Implementations§
impl<T> RefUnwindSafe for MaybeUndefined<T>where
    T: RefUnwindSafe,
impl<T> Send for MaybeUndefined<T>where
    T: Send,
impl<T> Sync for MaybeUndefined<T>where
    T: Sync,
impl<T> Unpin for MaybeUndefined<T>where
    T: Unpin,
impl<T> UnwindSafe for MaybeUndefined<T>where
    T: UnwindSafe,
Blanket Implementations§
source§impl<Q, K> Equivalent<K> for Qwhere
    Q: Eq + ?Sized,
    K: Borrow<Q> + ?Sized,
 
impl<Q, K> Equivalent<K> for Qwhere
    Q: Eq + ?Sized,
    K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.