1pub mod cbor_encodings;
5pub mod metadata;
6pub mod serialization;
7pub mod utils;
8
9use crate::plutus::{PlutusV1Script, PlutusV2Script, PlutusV3Script};
10use crate::transaction::NativeScript;
11use cbor_encodings::{ConwayFormatAuxDataEncoding, ShelleyMAFormatAuxDataEncoding};
12
13pub use metadata::*;
14
15#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
16pub enum AuxiliaryData {
17 Shelley(ShelleyFormatAuxData),
18 ShelleyMA(ShelleyMAFormatAuxData),
19 Conway(ConwayFormatAuxData),
20}
21
22impl AuxiliaryData {
23 pub fn new_shelley(shelley: ShelleyFormatAuxData) -> Self {
24 Self::Shelley(shelley)
25 }
26
27 pub fn new_shelley_ma(shelley_ma: ShelleyMAFormatAuxData) -> Self {
28 Self::ShelleyMA(shelley_ma)
29 }
30
31 pub fn new_conway(conway: ConwayFormatAuxData) -> Self {
32 Self::Conway(conway)
33 }
34}
35
36#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
37pub struct ConwayFormatAuxData {
38 pub metadata: Option<Metadata>,
39 pub native_scripts: Option<Vec<NativeScript>>,
40 pub plutus_v1_scripts: Option<Vec<PlutusV1Script>>,
41 pub plutus_v2_scripts: Option<Vec<PlutusV2Script>>,
42 pub plutus_v3_scripts: Option<Vec<PlutusV3Script>>,
43 #[serde(skip)]
44 pub encodings: Option<ConwayFormatAuxDataEncoding>,
45}
46
47impl ConwayFormatAuxData {
48 pub fn new() -> Self {
49 Self {
50 metadata: None,
51 native_scripts: None,
52 plutus_v1_scripts: None,
53 plutus_v2_scripts: None,
54 plutus_v3_scripts: None,
55 encodings: None,
56 }
57 }
58}
59
60impl Default for ConwayFormatAuxData {
61 fn default() -> Self {
62 Self::new()
63 }
64}
65
66pub type ShelleyFormatAuxData = Metadata;
67
68#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
69pub struct ShelleyMAFormatAuxData {
70 pub transaction_metadata: Metadata,
71 pub auxiliary_scripts: Vec<NativeScript>,
72 #[serde(skip)]
73 pub encodings: Option<ShelleyMAFormatAuxDataEncoding>,
74}
75
76impl ShelleyMAFormatAuxData {
77 pub fn new(transaction_metadata: Metadata, auxiliary_scripts: Vec<NativeScript>) -> Self {
78 Self {
79 transaction_metadata,
80 auxiliary_scripts,
81 encodings: None,
82 }
83 }
84}