daml_lf/
error.rs

1#![allow(clippy::used_underscore_binding)]
2use thiserror::Error;
3
4/// Represents `Daml-LF` errors.
5#[derive(Error, Debug)]
6pub enum DamlLfError {
7    #[error("failed to parse Daml LF: {0}")]
8    DamlLfParseError(#[from] prost::DecodeError),
9    #[error("failed to parse dar file: {0}")]
10    DarParseError(String),
11    #[error("failed to convert Daml LF: {0}")]
12    DamlLfConvertError(#[from] DamlLfConvertError),
13    #[error("io error: {0}")]
14    IoError(#[from] std::io::Error),
15    #[error("unknown Daml LF version: {0}")]
16    UnknownVersion(String),
17    #[error("unsupported Daml LF version: {0}")]
18    UnsupportedVersion(String),
19}
20
21impl DamlLfError {
22    pub fn new_dar_parse_error(error: impl Into<String>) -> Self {
23        DamlLfError::DarParseError(error.into())
24    }
25
26    pub fn new_unknown_version(version: impl Into<String>) -> Self {
27        DamlLfError::UnknownVersion(version.into())
28    }
29
30    pub fn new_unsupported_version(version: impl Into<String>) -> Self {
31        DamlLfError::UnsupportedVersion(version.into())
32    }
33}
34
35impl From<yaml_rust::scanner::ScanError> for DamlLfError {
36    fn from(e: yaml_rust::scanner::ScanError) -> Self {
37        DamlLfError::DarParseError(e.to_string())
38    }
39}
40
41impl From<zip::result::ZipError> for DamlLfError {
42    fn from(e: zip::result::ZipError) -> Self {
43        DamlLfError::DarParseError(e.to_string())
44    }
45}
46
47/// Represents `Daml-LF` results.
48pub type DamlLfResult<T> = Result<T, DamlLfError>;
49
50/// Daml code generator errors.
51#[derive(Debug, Error)]
52pub enum DamlLfConvertError {
53    /// A `DamlTypePayload::ContractId` contained more than one type argument.
54    #[error("unexpected contract id type arguments")]
55    UnexpectedContractIdTypeArguments,
56    /// A required optional field was None.
57    #[error("required field was not supplied")]
58    MissingRequiredField,
59    /// A Daml type not supported by the code generator was found.
60    #[error("the type {0} is not currently supported")]
61    UnsupportedType(String),
62    /// A Daml choice was not a `DamlDataWrapper::Record`.
63    #[error("choice argument was not a record")]
64    UnexpectedChoiceData,
65    /// A feature supported by this archive version was not used.
66    #[error("Daml LF version {0} supports feature {1} but was not used (supported as of version {2})")]
67    SupportedFeatureUnused(String, String, String),
68    /// A feature not supported by this archive version was used.
69    #[error("Daml LF version {0} does not support feature {1} (requires version {2})")]
70    UnsupportedFeatureUsed(String, String, String),
71    /// An unexpected `DamlDataPayload` variant was found.
72    #[error("unexpected DamlDataPayload variant")]
73    UnexpectedData,
74    /// Expected a given `DamlTypePayload` but found a different `DamlTypePayload`
75    #[error("expected type {0} but found type {1}")]
76    UnexpectedType(String, String),
77    /// Failed to lookup a `DamlPackagePayload` by id.
78    #[error("failed to lookup a DamlPackagePayload with id {0}")]
79    UnknownPackage(String),
80    /// Failed to lookup a `DamlModulePayload` by id.
81    #[error("failed to lookup a DamlModulePayload with id {0}")]
82    UnknownModule(String),
83    /// Failed to lookup a `DamlDataPayload` by id.
84    #[error("failed to lookup a DamlDataPayload with id {0}")]
85    UnknownData(String),
86    /// Unknown PrimCon enum variant.
87    #[error("unknown PrimCon enum variant {0}")]
88    UnknownPrimCon(i32),
89    /// Unknown BuiltinFunction enum variant.
90    #[error("unknown BuiltinFunction enum variant {0}")]
91    UnknownBuiltinFunction(i32),
92    /// Unknown RoundingMode enum variant.
93    #[error("unknown RoundingMode enum variant {0}")]
94    UnknownRoundingMode(i32),
95    /// Nat out of range (0..37 inclusive).
96    #[error("Nat {0} out of range (0..37 inclusive)")]
97    NatOutOfRange(i64),
98    /// Internal error.
99    #[error("Internal error: {0}")]
100    InternalError(String),
101}
102
103/// Represents `Daml-LF` convert results.
104pub type DamlLfConvertResult<T> = Result<T, DamlLfConvertError>;