@@ -558,79 +558,86 @@ where
558
558
}
559
559
}
560
560
561
- impl TryFromCSL < csl:: plutus :: PlutusData > for PlutusData {
562
- fn try_from_csl ( value : & csl:: plutus :: PlutusData ) -> Result < Self , TryFromCSLError > {
561
+ impl TryFromCSL < csl:: PlutusData > for PlutusData {
562
+ fn try_from_csl ( value : & csl:: PlutusData ) -> Result < Self , TryFromCSLError > {
563
563
Ok ( match value. kind ( ) {
564
- csl:: plutus :: PlutusDataKind :: ConstrPlutusData => {
564
+ csl:: PlutusDataKind :: ConstrPlutusData => {
565
565
let constr_data = value. as_constr_plutus_data ( ) . unwrap ( ) ;
566
566
let tag = BigInt :: from_csl ( & constr_data. alternative ( ) ) ;
567
567
let args = constr_data. data ( ) . try_to_pla ( ) ?;
568
568
PlutusData :: Constr ( tag, args)
569
569
}
570
- csl:: plutus:: PlutusDataKind :: Map => {
571
- PlutusData :: Map ( value. as_map ( ) . unwrap ( ) . try_to_pla ( ) ?)
572
- }
573
- csl:: plutus:: PlutusDataKind :: List => {
574
- PlutusData :: List ( value. as_list ( ) . unwrap ( ) . try_to_pla ( ) ?)
575
- }
576
- csl:: plutus:: PlutusDataKind :: Integer => {
570
+ csl:: PlutusDataKind :: Map => PlutusData :: Map ( value. as_map ( ) . unwrap ( ) . try_to_pla ( ) ?) ,
571
+ csl:: PlutusDataKind :: List => PlutusData :: List ( value. as_list ( ) . unwrap ( ) . try_to_pla ( ) ?) ,
572
+ csl:: PlutusDataKind :: Integer => {
577
573
PlutusData :: Integer ( value. as_integer ( ) . unwrap ( ) . try_to_pla ( ) ?)
578
574
}
579
- csl:: plutus :: PlutusDataKind :: Bytes => PlutusData :: Bytes ( value. as_bytes ( ) . unwrap ( ) ) ,
575
+ csl:: PlutusDataKind :: Bytes => PlutusData :: Bytes ( value. as_bytes ( ) . unwrap ( ) ) ,
580
576
} )
581
577
}
582
578
}
583
579
584
- impl TryFromCSL < csl:: plutus :: PlutusList > for Vec < PlutusData > {
585
- fn try_from_csl ( value : & csl:: plutus :: PlutusList ) -> Result < Self , TryFromCSLError > {
580
+ impl TryFromCSL < csl:: PlutusList > for Vec < PlutusData > {
581
+ fn try_from_csl ( value : & csl:: PlutusList ) -> Result < Self , TryFromCSLError > {
586
582
( 0 ..value. len ( ) )
587
583
. map ( |idx| value. get ( idx) . try_to_pla ( ) )
588
584
. collect ( )
589
585
}
590
586
}
591
587
592
- impl TryFromCSL < csl:: plutus :: PlutusMap > for Vec < ( PlutusData , PlutusData ) > {
593
- fn try_from_csl ( c_map : & csl:: plutus :: PlutusMap ) -> Result < Self , TryFromCSLError > {
588
+ impl TryFromCSL < csl:: PlutusMap > for Vec < ( PlutusData , PlutusData ) > {
589
+ fn try_from_csl ( c_map : & csl:: PlutusMap ) -> Result < Self , TryFromCSLError > {
594
590
let keys = c_map. keys ( ) ;
595
- ( 0 ..keys. len ( ) )
596
- . map ( |idx| {
597
- let key = keys. get ( idx) ;
598
- let value = c_map. get ( & key) . unwrap ( ) ;
599
- Ok ( ( key. try_to_pla ( ) ?, value. try_to_pla ( ) ?) )
600
- } )
601
- . collect ( )
591
+ ( 0 ..keys. len ( ) ) . try_fold ( Vec :: new ( ) , |mut vector, idx| {
592
+ let key = keys. get ( idx) ;
593
+ let values = c_map. get ( & key) . unwrap ( ) ;
594
+
595
+ for value_idx in 0 ..values. len ( ) {
596
+ vector. push ( (
597
+ key. clone ( ) . try_to_pla ( ) ?,
598
+ values. get ( value_idx) . unwrap ( ) . try_to_pla ( ) ?,
599
+ ) )
600
+ }
601
+
602
+ Ok ( vector)
603
+ } )
602
604
}
603
605
}
604
606
605
- impl TryFromPLA < PlutusData > for csl:: plutus :: PlutusData {
607
+ impl TryFromPLA < PlutusData > for csl:: PlutusData {
606
608
fn try_from_pla ( val : & PlutusData ) -> Result < Self , TryFromPLAError > {
607
609
match val {
608
- PlutusData :: Constr ( tag, args) => Ok ( csl:: plutus :: PlutusData :: new_constr_plutus_data (
609
- & csl:: plutus :: ConstrPlutusData :: new ( & tag. try_to_csl ( ) ?, & args. try_to_csl ( ) ?) ,
610
+ PlutusData :: Constr ( tag, args) => Ok ( csl:: PlutusData :: new_constr_plutus_data (
611
+ & csl:: ConstrPlutusData :: new ( & tag. try_to_csl ( ) ?, & args. try_to_csl ( ) ?) ,
610
612
) ) ,
611
- PlutusData :: Map ( l) => Ok ( csl:: plutus :: PlutusData :: new_map ( & l. try_to_csl ( ) ?) ) ,
612
- PlutusData :: List ( l) => Ok ( csl:: plutus :: PlutusData :: new_list ( & l. try_to_csl ( ) ?) ) ,
613
- PlutusData :: Integer ( i) => Ok ( csl:: plutus :: PlutusData :: new_integer ( & i. try_to_csl ( ) ?) ) ,
614
- PlutusData :: Bytes ( b) => Ok ( csl:: plutus :: PlutusData :: new_bytes ( b. to_owned ( ) ) ) ,
613
+ PlutusData :: Map ( l) => Ok ( csl:: PlutusData :: new_map ( & l. try_to_csl ( ) ?) ) ,
614
+ PlutusData :: List ( l) => Ok ( csl:: PlutusData :: new_list ( & l. try_to_csl ( ) ?) ) ,
615
+ PlutusData :: Integer ( i) => Ok ( csl:: PlutusData :: new_integer ( & i. try_to_csl ( ) ?) ) ,
616
+ PlutusData :: Bytes ( b) => Ok ( csl:: PlutusData :: new_bytes ( b. to_owned ( ) ) ) ,
615
617
}
616
618
}
617
619
}
618
620
619
- impl TryFromPLA < Vec < PlutusData > > for csl:: plutus :: PlutusList {
621
+ impl TryFromPLA < Vec < PlutusData > > for csl:: PlutusList {
620
622
fn try_from_pla ( val : & Vec < PlutusData > ) -> Result < Self , TryFromPLAError > {
621
623
val. iter ( )
622
624
// traverse
623
625
. map ( |x| x. try_to_csl ( ) )
624
- . collect :: < Result < Vec < csl:: plutus :: PlutusData > , TryFromPLAError > > ( )
626
+ . collect :: < Result < Vec < csl:: PlutusData > , TryFromPLAError > > ( )
625
627
. map ( |x| x. into ( ) )
626
628
}
627
629
}
628
630
629
- impl TryFromPLA < Vec < ( PlutusData , PlutusData ) > > for csl:: plutus :: PlutusMap {
631
+ impl TryFromPLA < Vec < ( PlutusData , PlutusData ) > > for csl:: PlutusMap {
630
632
fn try_from_pla ( val : & Vec < ( PlutusData , PlutusData ) > ) -> Result < Self , TryFromPLAError > {
631
633
val. iter ( )
632
- . try_fold ( csl:: plutus:: PlutusMap :: new ( ) , |mut acc, ( k, v) | {
633
- acc. insert ( & k. try_to_csl ( ) ?, & v. try_to_csl ( ) ?) ;
634
+ . try_fold ( csl:: PlutusMap :: new ( ) , |mut acc, ( k, v) | {
635
+ let mut values = match acc. get ( & k. try_to_csl ( ) ?) {
636
+ Some ( existing_values) => existing_values,
637
+ None => csl:: PlutusMapValues :: new ( ) ,
638
+ } ;
639
+ values. add ( & v. try_to_csl ( ) ?) ;
640
+ acc. insert ( & k. try_to_csl ( ) ?, & values) ;
634
641
Ok ( acc)
635
642
} )
636
643
}
0 commit comments