openinfer-dsl 0.1.0

Rust-embedded DSL for defining OpenInfer graphs with explicit control flow and memory semantics.
Documentation
use proc_macro2::TokenStream;
use quote::quote;
use syn::Ident;

use crate::types::{OpAttrValue, OpSetting};

use super::{attr_value_expr, SettingsMap};

pub(crate) fn build_attrs(op: &Ident, settings: &[OpSetting]) -> syn::Result<TokenStream> {
    let mut settings = SettingsMap::new(op, settings)?;

    let value = settings
        .take_value("value")
        .unwrap_or_else(|| OpAttrValue::Double(0.0));

    settings.ensure_empty()?;

    let value_expr = attr_value_expr(&value);

    Ok(quote! {
        ::openinfer::OpAttrs::Fill {
            value: #value_expr,
        }
    })
}