azure-functions-shared 0.11.0

Implementations shared between the azure-functions-codegen and azure-functions crates.
Documentation
use crate::codegen::bindings::Direction;
use proc_macro2::TokenStream;
use quote::{quote, ToTokens};
use std::borrow::Cow;

pub struct QuotableBorrowedStr<'a>(pub &'a str);

impl ToTokens for QuotableBorrowedStr<'_> {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        let s = self.0;
        quote!(::std::borrow::Cow::Borrowed(#s)).to_tokens(tokens);
    }
}

pub struct QuotableStrArray<'a>(pub &'a [Cow<'a, str>]);

impl ToTokens for QuotableStrArray<'_> {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        let strings = self.0.iter().map(|s| QuotableBorrowedStr(s));
        quote!(::std::borrow::Cow::Borrowed(&[#(#strings,)*])).to_tokens(tokens);
    }
}

pub struct QuotableOption<T>(pub Option<T>);

impl<T: ToTokens> ToTokens for QuotableOption<T> {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        match &self.0 {
            Some(inner) => quote!(Some(#inner)),
            None => quote!(None),
        }
        .to_tokens(tokens);
    }
}

pub struct QuotableDirection(pub Direction);

impl ToTokens for QuotableDirection {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        match self.0 {
            Direction::In => quote!(::azure_functions::codegen::bindings::Direction::In),
            Direction::InOut => quote!(::azure_functions::codegen::bindings::Direction::InOut),
            Direction::Out => quote!(::azure_functions::codegen::bindings::Direction::Out),
        }
        .to_tokens(tokens);
    }
}