apollo-errors-derive 0.4.0

Proc macro for deriving apollo-errors::Error trait
Documentation
//! Helper functions for struct code generation

use proc_macro2::TokenStream;
use quote::quote;

use crate::ir::FieldDefinition;

/// Generate field value for JSON/GraphQL.
/// Returns `Option<(&str, Value)>` - None if the field is Option and value is None.
pub fn generate_field_value(field: &FieldDefinition) -> TokenStream {
    let private = quote!(::apollo_errors::private);
    let serde_json_crate = quote!(#private::serde_json);

    let rust_name = &field.rust_name;
    let output_name = &field.output_name;

    if field.is_option {
        quote! {
            self.#rust_name.as_ref().map(|__apollo_inner| {
                (#output_name, #serde_json_crate::to_value(__apollo_inner).unwrap_or(#serde_json_crate::Value::Null))
            })
        }
    } else {
        quote! {
            ::std::option::Option::Some((#output_name, #serde_json_crate::to_value(&self.#rust_name).unwrap_or(#serde_json_crate::Value::Null)))
        }
    }
}