reproto_core/
rp_service.rs1use errors::Result;
4use {Diagnostics, Flavor, Loc, RpReg, Translate, Translator};
5
6#[derive(Debug, Clone, Serialize, Default)]
7pub struct RpServiceBodyHttp {
8 #[serde(skip_serializing_if = "Option::is_none")]
10 pub url: Option<Loc<String>>,
11}
12
13decl_body!(pub struct RpServiceBody<F> {
14 pub http: RpServiceBodyHttp,
15 pub endpoints: Vec<Loc<F::Endpoint>>,
16});
17
18impl<F: 'static, T> Translate<T> for RpServiceBody<F>
19where
20 F: Flavor,
21 T: Translator<Source = F>,
22{
23 type Source = F;
24 type Out = RpServiceBody<T::Target>;
25
26 fn translate(self, diag: &mut Diagnostics, translator: &T) -> Result<RpServiceBody<T::Target>> {
28 translator.visit(diag, &self.name)?;
29
30 let name = translator.translate_local_name(diag, RpReg::Service, self.name)?;
31
32 let endpoints = self.endpoints
33 .into_iter()
34 .map(|e| Loc::and_then(e, |e| translator.translate_endpoint(diag, e)))
35 .collect::<Result<Vec<_>>>()?;
36
37 Ok(RpServiceBody {
38 name: name,
39 ident: self.ident,
40 comment: self.comment,
41 decls: self.decls.translate(diag, translator)?,
42 http: self.http,
43 endpoints: endpoints,
44 })
45 }
46}