@@ -13,6 +13,7 @@ import LambdaBuffers.Codegen.LamVal.PlutusData (deriveFromPlutusDataImpl, derive
1313import LambdaBuffers.Codegen.Print qualified as Print
1414import LambdaBuffers.Codegen.Rust.Print (MonadPrint )
1515import LambdaBuffers.Codegen.Rust.Print.LamVal (printInstance )
16+ import LambdaBuffers.Codegen.Rust.Print.Refs qualified as RR
1617import LambdaBuffers.Codegen.Rust.Print.Syntax qualified as R
1718import LambdaBuffers.ProtoCompat qualified as PC
1819import Prettyprinter (Doc , align , braces , colon , comma , encloseSep , hcat , indent , lparen , parens , rparen , space , vsep , (<+>) )
@@ -32,22 +33,10 @@ rsTraitImplPrinters ::
3233 )
3334rsTraitImplPrinters =
3435 Map. fromList
35- [
36- ( R. qLibRef R. MkTraitName " std" " cmp" " PartialEq"
37- , printDerivePartialEqBase
38- )
39- ,
40- ( R. qLibRef R. MkTraitName " std" " cmp" " Eq"
41- , printDeriveEqBase
42- )
43- ,
44- ( R. qLibRef R. MkTraitName " plutus-ledger-api" " plutus_data" " IsPlutusData"
45- , printDeriveIsPlutusData
46- )
47- ,
48- ( R. qLibRef R. MkTraitName " lbr-prelude" " json" " Json"
49- , printDeriveJson
50- )
36+ [ (RR. partialEqTrait, printDerivePartialEqBase)
37+ , (RR. eqTrait, printDeriveEqBase)
38+ , (RR. isPlutusDataTrait, printDeriveIsPlutusData)
39+ , (RR. jsonTrait, printDeriveJson)
5140 ]
5241eqTraitMethodName :: R. ValueName
5342eqTraitMethodName = R. MkValueName " eq"
@@ -60,13 +49,13 @@ eqTraitMethodReturns = R.qBuiltin R.MkTyName "bool"
6049
6150lvEqBuiltinsBase :: LV. PrintRead R. QValName
6251lvEqBuiltinsBase = LV. MkPrintRead $ \ (_ty, refName) ->
63- Map. lookup refName $
64- Map. fromList
65- [ (" eq" , R. qLibRef R. MkValueName " lbr-prelude" " lamval" " eq" )
66- , (" and" , R. qLibRef R. MkValueName " lbr-prelude" " lamval" " and" )
52+ Map. lookup refName
53+ $ Map. fromList
54+ [ (" eq" , R. qForeignRef R. MkValueName " lbr-prelude" [ " lamval" ] " eq" )
55+ , (" and" , R. qForeignRef R. MkValueName " lbr-prelude" [ " lamval" ] " and" )
6756 , (" true" , R. qBuiltin R. MkValueName " true" )
6857 , (" false" , R. qBuiltin R. MkValueName " false" )
69- , (" PhantomData" , R. qLibRef R. MkValueName " std" " marker" " PhantomData" )
58+ , (" PhantomData" , R. qForeignRef R. MkValueName " std" [ " marker" ] " PhantomData" )
7059 ]
7160
7261printDerivePartialEqBase :: MonadPrint m => PC. ModuleName -> R. PkgMap -> PC. TyDefs -> (Doc ann -> Doc ann ) -> PC. Ty -> m (Doc ann )
@@ -78,26 +67,26 @@ printDerivePartialEqBase mn pkgs iTyDefs mkInstance ty = do
7867 Left err -> Print. throwInternalError' (mn ^. # sourceInfo) (" Interpreting LamVal into Rust failed with: " <> err ^. P. msg)
7968 Right (implDoc, imps) -> do
8069 for_ imps Print. importValue
81- return $
82- mkInstance $
83- printTraitMethod eqTraitMethodName eqTraitMethodArgs eqTraitMethodReturns implDoc
70+ return
71+ $ mkInstance
72+ $ printTraitMethod eqTraitMethodName eqTraitMethodArgs eqTraitMethodReturns implDoc
8473
8574printDeriveEqBase :: MonadPrint m => PC. ModuleName -> R. PkgMap -> PC. TyDefs -> (Doc ann -> Doc ann ) -> PC. Ty -> m (Doc ann )
8675printDeriveEqBase _ _ _ mkInstance _ = return $ mkInstance mempty
8776
8877lvPlutusDataBuiltins :: LV. PrintRead R. QValName
8978lvPlutusDataBuiltins = LV. MkPrintRead $ \ (_ty, refName) ->
90- Map. lookup refName $
91- Map. fromList
92- [ (" toPlutusData" , R. qLibRef R. MkValueName " plutus-ledger-api" " plutus_data:: IsPlutusData" " to_plutus_data" )
93- , (" fromPlutusData" , R. qLibRef R. MkValueName " plutus-ledger-api" " plutus_data:: IsPlutusData" " from_plutus_data" )
94- , (" casePlutusData" , R. qLibRef R. MkValueName " plutus-ledger-api" " lamval" " case_plutus_data" )
95- , (" integerData" , R. qLibRef R. MkValueName " plutus-ledger-api" " plutus_data" " PlutusData::integer" )
96- , (" constrData" , R. qLibRef R. MkValueName " plutus-ledger-api" " lamval" " constr" )
97- , (" listData" , R. qLibRef R. MkValueName " plutus-ledger-api" " plutus_data" " PlutusData::list" )
98- , (" succeedParse" , R. qLibRef R. MkValueName " std" " result" " Result:: Ok" )
99- , (" failParse" , R. qLibRef R. MkValueName " plutus-ledger-api" " lamval" " fail_parse()" )
100- , (" bindParse" , R. qLibRef R. MkValueName " plutus-ledger-api" " lamval" " bind_parse" )
79+ Map. lookup refName
80+ $ Map. fromList
81+ [ (" toPlutusData" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " plutus_data" , " IsPlutusData" ] " to_plutus_data" )
82+ , (" fromPlutusData" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " plutus_data" , " IsPlutusData" ] " from_plutus_data" )
83+ , (" casePlutusData" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " lamval" ] " case_plutus_data" )
84+ , (" integerData" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " plutus_data" ] " PlutusData::integer" )
85+ , (" constrData" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " lamval" ] " constr" )
86+ , (" listData" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " plutus_data" ] " PlutusData::list" )
87+ , (" succeedParse" , R. qForeignRef R. MkValueName " std" [ " result" , " Result" ] " Ok" )
88+ , (" failParse" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " lamval" ] " fail_parse()" )
89+ , (" bindParse" , R. qForeignRef R. MkValueName " plutus-ledger-api" [ " lamval" ] " bind_parse" )
10190 ]
10291
10392toPlutusDataTraitMethodName :: R. ValueName
@@ -108,7 +97,7 @@ toPlutusDataTraitMethodArgs = [(R.MkValueName "self", R.qBuiltin R.MkTyName "Sel
10897
10998toPlutusDataTraitMethodReturns :: R. QTyName
11099toPlutusDataTraitMethodReturns =
111- R. qLibRef R. MkTyName " plutus-ledger-api" " plutus_data" " PlutusData"
100+ R. qForeignRef R. MkTyName " plutus-ledger-api" [ " plutus_data" ] " PlutusData"
112101
113102fromPlutusDataTraitMethodName :: R. ValueName
114103fromPlutusDataTraitMethodName = R. MkValueName " from_plutus_data"
@@ -117,20 +106,20 @@ fromPlutusDataTraitMethodArgs :: [(R.ValueName, R.QTyName)]
117106fromPlutusDataTraitMethodArgs =
118107 [
119108 ( R. MkValueName " plutus_data"
120- , R. qLibRef
109+ , R. qForeignRef
121110 R. MkTyName
122111 " plutus-ledger-api"
123- " plutus_data"
112+ [ " plutus_data" ]
124113 " PlutusData"
125114 )
126115 ]
127116
128117fromPlutusDataTraitMethodReturns :: R. QTyName
129118fromPlutusDataTraitMethodReturns =
130- R. qLibRef
119+ R. qForeignRef
131120 R. MkTyName
132121 " std"
133- " result"
122+ [ " result" ]
134123 " Result<Self, plutus_ledger_api::plutus_data::PlutusDataError>"
135124
136125printDeriveIsPlutusData :: MonadPrint m => PC. ModuleName -> R. PkgMap -> PC. TyDefs -> (Doc ann -> Doc ann ) -> PC. Ty -> m (Doc ann )
@@ -143,16 +132,16 @@ printDeriveIsPlutusData mn pkgs iTyDefs mkInstanceDoc ty = do
143132
144133printDeriveIsPlutusData' :: PC. ModuleName -> R. PkgMap -> PC. TyDefs -> (Doc ann -> Doc ann ) -> PC. Ty -> Either P. InternalError (Doc ann , Set R. QValName )
145134printDeriveIsPlutusData' mn pkgs iTyDefs mkInstanceDoc ty = do
146- let extraDeps = Set. singleton (R. qLibRef R. MkValueName " serde_json" " " " Value" )
135+ let extraDeps = Set. singleton (R. qForeignRef R. MkValueName " serde_json" [] " Value" )
147136 toPlutusDataValE <- deriveToPlutusDataImpl mn iTyDefs ty
148137 (toPlutusDataImplDoc, impsA) <- LV. runPrint lvPlutusDataBuiltins (printInstance pkgs [R. qBuiltin R. MkTyName " Self" ] iTyDefs toPlutusDataValE)
149138 fromPlutusDataValE <- deriveFromPlutusDataImpl mn iTyDefs ty
150- (fromPlutusDataImplDoc, impsB) <- LV. runPrint lvPlutusDataBuiltins (printInstance pkgs [R. qLibRef R. MkTyName " plutus-ledger-api" " plutus_data" " PlutusData" ] iTyDefs fromPlutusDataValE)
139+ (fromPlutusDataImplDoc, impsB) <- LV. runPrint lvPlutusDataBuiltins (printInstance pkgs [R. qForeignRef R. MkTyName " plutus-ledger-api" [ " plutus_data" ] " PlutusData" ] iTyDefs fromPlutusDataValE)
151140
152141 let instanceDoc =
153142 mkInstanceDoc
154- ( align $
155- vsep
143+ ( align
144+ $ vsep
156145 [ printTraitMethod
157146 toPlutusDataTraitMethodName
158147 toPlutusDataTraitMethodArgs
@@ -173,20 +162,20 @@ printDeriveIsPlutusData' mn pkgs iTyDefs mkInstanceDoc ty = do
173162-- | LambdaBuffers.Codegen.LamVal.Json specification printing
174163lvJsonBuiltins :: LV. PrintRead R. QValName
175164lvJsonBuiltins = LV. MkPrintRead $ \ (_ty, refName) ->
176- Map. lookup refName $
177- Map. fromList
178- [ (" toJson" , R. qLibRef R. MkValueName " lbr-prelude" " json:: Json" " to_json" )
179- , (" fromJson" , R. qLibRef R. MkValueName " lbr-prelude" " json:: Json" " from_json" )
180- , (" jsonObject" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " json_object" )
181- , (" jsonConstructor" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " json_constructor" )
182- , (" jsonArray" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " json_array" )
183- , (" caseJsonConstructor" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " case_json_constructor" )
184- , (" caseJsonArray" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " case_json_array" )
185- , (" caseJsonObject" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " case_json_object" )
186- , (" jsonField" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " json_field" )
187- , (" succeedParse" , R. qLibRef R. MkValueName " std" " result" " Result:: Ok" )
188- , (" failParse" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " fail_parse" )
189- , (" bindParse" , R. qLibRef R. MkValueName " lbr-prelude" " json:: lamval" " bind_parse" )
165+ Map. lookup refName
166+ $ Map. fromList
167+ [ (" toJson" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " Json" ] " to_json" )
168+ , (" fromJson" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " Json" ] " from_json" )
169+ , (" jsonObject" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " json_object" )
170+ , (" jsonConstructor" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " json_constructor" )
171+ , (" jsonArray" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " json_array" )
172+ , (" caseJsonConstructor" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " case_json_constructor" )
173+ , (" caseJsonArray" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " case_json_array" )
174+ , (" caseJsonObject" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " case_json_object" )
175+ , (" jsonField" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " json_field" )
176+ , (" succeedParse" , R. qForeignRef R. MkValueName " std" [ " result" , " Result" ] " Ok" )
177+ , (" failParse" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " fail_parse" )
178+ , (" bindParse" , R. qForeignRef R. MkValueName " lbr-prelude" [ " json" , " lamval" ] " bind_parse" )
190179 ]
191180
192181toJsonTraitMethodName :: R. ValueName
@@ -197,17 +186,17 @@ toJsonTraitMethodArgs = [(R.MkValueName "self", R.qBuiltin R.MkTyName "Self")]
197186
198187toJsonTraitMethodReturns :: R. QTyName
199188toJsonTraitMethodReturns =
200- R. qLibRef R. MkTyName " serde_json" " " " Value"
189+ R. qForeignRef R. MkTyName " serde_json" [] " Value"
201190
202191fromJsonTraitMethodName :: R. ValueName
203192fromJsonTraitMethodName = R. MkValueName " from_json"
204193
205194fromJsonTraitMethodArgs :: [(R. ValueName , R. QTyName )]
206- fromJsonTraitMethodArgs = [(R. MkValueName " value" , R. qLibRef R. MkTyName " serde_json" " " " Value" )]
195+ fromJsonTraitMethodArgs = [(R. MkValueName " value" , R. qForeignRef R. MkTyName " serde_json" [] " Value" )]
207196
208197fromJsonTraitMethodReturns :: R. QTyName
209198fromJsonTraitMethodReturns =
210- R. qLibRef R. MkTyName " std" " result" " Result<Self, lbr_prelude::error::Error>" -- TODO(szg251): This is a hack
199+ R. qForeignRef R. MkTyName " std" [ " result" ] " Result<Self, lbr_prelude::error::Error>" -- TODO(szg251): This is a hack
211200
212201printDeriveJson :: MonadPrint m => PC. ModuleName -> R. PkgMap -> PC. TyDefs -> (Doc ann -> Doc ann ) -> PC. Ty -> m (Doc ann )
213202printDeriveJson mn pkgs iTyDefs mkInstanceDoc ty = do
@@ -226,8 +215,8 @@ printDeriveJson' mn pkgs iTyDefs mkInstanceDoc ty = do
226215
227216 let instanceDoc =
228217 mkInstanceDoc
229- ( align $
230- vsep
218+ ( align
219+ $ vsep
231220 [ printTraitMethod
232221 toJsonTraitMethodName
233222 toJsonTraitMethodArgs
@@ -242,7 +231,7 @@ printDeriveJson' mn pkgs iTyDefs mkInstanceDoc ty = do
242231 )
243232 return
244233 ( instanceDoc
245- , impsA <> impsB <> Set. singleton (R. qLibRef R. MkValueName " serde_json" " " " Value" )
234+ , impsA <> impsB <> Set. singleton (R. qForeignRef R. MkValueName " serde_json" [] " Value" )
246235 )
247236
248237{- | Print a trait method implementation
@@ -261,11 +250,11 @@ printTraitMethod fnName args returns implDoc =
261250 let argsWithTypes =
262251 encloseSep lparen rparen comma $ (\ (arg, ty) -> R. printRsValName arg <> colon <+> " &'a " <> R. printRsQTyName ty) <$> args
263252 argsLst = hcat $ parens . R. printRsValName . fst <$> args
264- in indent 4 $
265- " fn"
266- <+> R. printRsValName fnName
267- <> " <'a>"
268- <> argsWithTypes
269- <+> " ->"
270- <+> R. printRsQTyName returns
271- <+> braces (space <> implDoc <> argsLst)
253+ in indent 4
254+ $ " fn"
255+ <+> R. printRsValName fnName
256+ <> " <'a>"
257+ <> argsWithTypes
258+ <+> " ->"
259+ <+> R. printRsQTyName returns
260+ <+> braces (space <> implDoc <> argsLst)
0 commit comments