use serde::{Deserialize, Serialize}; use mizan_rust::{MizanClient, MizanError}; {% if !type_imports.is_empty() -%} use crate::types::{ {{- type_imports|join(", ") -}} }; {% endif -%} #[derive(Debug, Clone, Serialize, Deserialize)] pub struct {{ pascal }}ContextData { {% for field in data_fields -%} {% if field.has_rename %} #[serde(rename = "{{ field.wire_name }}")] {% endif %} pub {{ field.ident }}: {% if field.optional %}Option<{{ field.ty }}>{% else %}{{ field.ty }}{% endif %}, {% endfor -%} } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct {{ pascal }}ContextParams { {% for p in params -%} {% if p.has_rename %} #[serde(rename = "{{ p.wire_name }}")] {% endif %} pub {{ p.ident }}: {% if p.optional %}Option<{{ p.ty }}>{% else %}{{ p.ty }}{% endif %}, {% endfor -%} } pub async fn fetch_{{ snake }}_context( client: &MizanClient, params: &{{ pascal }}ContextParams, ) -> Result<{{ pascal }}ContextData, MizanError> { let params_value = serde_json::to_value(params) .map_err(|e| MizanError::transport(format!("encode {{ ctx_name }} context params: {e}")))?; let raw = client.fetch_context("{{ ctx_name }}", ¶ms_value).await?; serde_json::from_value(raw) .map_err(|e| MizanError::transport(format!("decode {{ ctx_name }} context: {e}"))) }