melodium_share/
function.rs

1use super::{Attributes, DescribedType, Identifier, Parameter};
2use melodium_common::descriptor::Function as CommonFunction;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6#[cfg_attr(feature = "webassembly", derive(tsify::Tsify))]
7#[cfg_attr(feature = "webassembly", tsify(into_wasm_abi, from_wasm_abi))]
8pub struct Function {
9    pub identifier: Identifier,
10    pub documentation: String,
11    pub parameters: Vec<Parameter>,
12    pub return_type: DescribedType,
13    pub attributes: Attributes,
14}
15
16impl From<&dyn CommonFunction> for Function {
17    fn from(value: &dyn CommonFunction) -> Self {
18        Self {
19            identifier: Identifier::from(value.identifier()),
20            documentation: value.documentation().to_string(),
21            parameters: value
22                .parameters()
23                .iter()
24                .map(|param| Parameter::from(param))
25                .collect(),
26            return_type: value.return_type().into(),
27            attributes: value.attributes().into(),
28        }
29    }
30}