use crate::*;
pub trait ProtoService {
fn proto_schema() -> Service;
}
#[derive(Debug, PartialEq, Builder)]
#[cfg_attr(feature = "std", derive(Template))]
#[cfg_attr(feature = "std", template(path = "service.proto.j2"))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub struct Service {
pub name: FixedStr,
pub file: FixedStr,
pub options: Vec<ProtoOption>,
pub handlers: Vec<ServiceHandler>,
pub package: FixedStr,
}
impl Service {
#[cfg(feature = "std")]
pub fn render_schema(&self) -> Result<String, askama::Error> {
self.render()
}
}
#[derive(Debug, PartialEq, Builder)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub struct ServiceHandler {
pub name: FixedStr,
pub options: Vec<ProtoOption>,
pub request: HandlerTarget,
pub response: HandlerTarget,
}
#[derive(Debug, PartialEq, Builder)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub struct HandlerTarget {
pub message: ProtoPath,
pub is_stream: bool,
}