mproto-codegen 0.0.7

library to parse and generate code for mproto schemas
Documentation
use genco::prelude::*;

use crate::{
    ast::NamedField,
    codegen::{js::js_type_encoder, CodegenCx},
};

pub fn js_named_fields_encode(cx: &CodegenCx, fields: &[NamedField]) -> js::Tokens {
    let mut encode_owned_tokens = quote! {};

    for field in fields {
        encode_owned_tokens = quote! {
            $encode_owned_tokens
            $(js_type_encoder(cx, &field.ty)).encode(cursor, value.$(&field.name));
        };
    }

    encode_owned_tokens
}

pub fn js_named_fields_decode(cx: &CodegenCx, fields: &[NamedField]) -> js::Tokens {
    let mut decode_owned_tokens = quote! {};

    for field in fields {
        decode_owned_tokens = quote! {
            $decode_owned_tokens
            let $(&field.name) = $(js_type_encoder(cx, &field.ty)).decode(cursor);
        };
    }

    decode_owned_tokens
}

pub fn js_named_fields_scratch_len(cx: &CodegenCx, fields: &[NamedField]) -> js::Tokens {
    let mut fields_scratch_len_tokens = js::Tokens::new();
    for field in fields {
        quote_in! { fields_scratch_len_tokens =>
            $(js_type_encoder(cx, &field.ty)).scratchLength(value.$(&field.name)) +$(" ")
        };
    }

    fields_scratch_len_tokens
}