xidl-parser 0.72.0

A IDL codegen.
Documentation
use serde::{Deserialize, Serialize};

use crate::hir;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JsonRpcHirDocument {
    pub spec: hir::Specification,
    pub interfaces: Vec<JsonRpcInterface>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JsonRpcInterface {
    pub ident: String,
    pub module_path: Vec<String>,
    pub annotations: Vec<hir::Annotation>,
    pub methods: Vec<JsonRpcMethod>,
    pub watch_methods: Vec<JsonRpcWatchMethod>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JsonRpcMethod {
    pub source: JsonRpcMethodSource,
    pub kind: JsonRpcMethodKind,
    pub name: String,
    pub rpc_name: String,
    pub annotations: Vec<hir::Annotation>,
    pub request_fields: Vec<JsonRpcField>,
    pub response_fields: Vec<JsonRpcField>,
    pub response_kind: JsonRpcResponseKind,
    pub stream_item: Option<hir::TypeSpec>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JsonRpcWatchMethod {
    pub getter_name: String,
    pub item_ty: hir::TypeSpec,
    pub stream_rpc_name: String,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum JsonRpcMethodSource {
    Operation,
    AttributeGet,
    AttributeSet,
    AttributeStreamSource,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum JsonRpcMethodKind {
    Unary,
    ServerStream,
    ClientStream,
    BidiStream,
    StreamSource,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum JsonRpcResponseKind {
    Empty,
    SingleReturn,
    SingleOutput,
    MultiOutput,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JsonRpcField {
    pub name: String,
    pub wire_name: String,
    pub ty: hir::TypeSpec,
    pub annotations: Vec<hir::Annotation>,
    pub required: bool,
    pub source: JsonRpcFieldSource,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum JsonRpcFieldSource {
    Return,
    Param,
}