[][src]Enum async_graphql::MaybeUndefined

pub enum MaybeUndefined<T> {
    Undefined,
    Null,
    Value(T),
}

Similar to Option, but it has three states, undefined, null and x.

Reference: https://spec.graphql.org/June2018/#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()
        }
    }
}

#[async_std::main]
async fn main() {
    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.unwrap().data,
        serde_json::json!({
            "v1": 99,
            "v2": 1,
            "v3": 2,
        })
    );
}

Variants

Undefined
Null
Value(T)

Implementations

impl<T> MaybeUndefined<T>[src]

pub fn is_undefined(&self) -> bool[src]

Returns true if the MaybeUndefined is undefined.

pub fn is_null(&self) -> bool[src]

Returns true if the MaybeUndefined is null.

pub fn value(&self) -> Option<&T>[src]

Borrow the value, returns None if the value is undefined or null, otherwise returns Some(T).

pub fn take(self) -> Option<T>[src]

Convert MaybeUndefined to Option.

Trait Implementations

impl<T: Type> Type for MaybeUndefined<T>[src]

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

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,