prosa-teleinfo-macros 0.1.0

Macro library for Enedis (French electricity network) Teleinfo
Documentation
use quote::quote;
use syn::parse::{Parse, ParseStream};
use syn::{LitStr, Result};

pub(crate) struct TeleinfoChecksumMacro {
    teleinfo_str: LitStr,
}

impl Parse for TeleinfoChecksumMacro {
    fn parse(input: ParseStream) -> Result<Self> {
        Ok(TeleinfoChecksumMacro {
            teleinfo_str: Parse::parse(input)?,
        })
    }
}

impl Into<proc_macro2::TokenStream> for TeleinfoChecksumMacro {
    fn into(self) -> proc_macro2::TokenStream {
        let teleinfo_val = self.teleinfo_str.value();

        let mut checksum = 0u64;
        for c in teleinfo_val.chars() {
            checksum += c as u64;
        }

        quote! {
            #checksum
        }
    }
}