daml_lf/convert/
wrapper.rs

1use crate::convert::archive_payload::DamlArchivePayload;
2use crate::convert::data_payload::DamlDataPayload;
3#[cfg(feature = "full")]
4use crate::convert::defvalue_payload::DamlDefValuePayload;
5use crate::convert::module_payload::{DamlDefTypeSynPayload, DamlModulePayload};
6use crate::convert::package_payload::DamlPackagePayload;
7
8#[derive(Debug, Clone, Copy)]
9pub struct PayloadElementWrapper<'a, P> {
10    pub context: DamlPayloadParentContext<'a>,
11    pub payload: P,
12}
13
14impl<'a, P> PayloadElementWrapper<'a, P> {
15    /// Create a new `PayloadElementWrapper<Q>` for an existing `DamlPayloadDataWrapper`.
16    pub const fn with_data<Q: 'a>(context: DamlPayloadParentContext<'a>, q: Q) -> PayloadElementWrapper<'a, Q> {
17        PayloadElementWrapper {
18            context,
19            payload: q,
20        }
21    }
22
23    /// Wrap a type Q in a `PayloadElementWrapper<Q>` whilst preserving context.
24    pub fn wrap<Q: 'a>(self, q: &'a Q) -> PayloadElementWrapper<'a, &'a Q> {
25        PayloadElementWrapper {
26            context: self.context,
27            payload: q,
28        }
29    }
30}
31
32/// A common context for wrapper types.
33///
34/// A common context for Daml items which exists within a given archive, package, module & data.
35#[derive(Debug, Clone, Copy)]
36pub struct DamlPayloadParentContext<'a> {
37    pub archive: &'a DamlArchivePayload<'a>,
38    pub package: &'a DamlPackagePayload<'a>,
39    pub module: &'a DamlModulePayload<'a>,
40    pub parent: DamlPayloadParentContextType<'a>,
41}
42
43/// DOCME
44#[derive(Debug, Clone, Copy)]
45pub enum DamlPayloadParentContextType<'a> {
46    Data(&'a DamlDataPayload<'a>),
47    DefTypeSyn(&'a DamlDefTypeSynPayload<'a>),
48    #[cfg(feature = "full")]
49    Value(&'a DamlDefValuePayload<'a>),
50}