Skip to content

Commit 8752148

Browse files
committed
Merge branch 'szg251/rust-codegen' of github.com:mlabs-haskell/lambda-buffers into szg251/rust-nix
2 parents adc70bc + 29aa622 commit 8752148

File tree

4 files changed

+82
-34
lines changed

4 files changed

+82
-34
lines changed

lambda-buffers-codegen/data/rust-plutus-pla.json

Lines changed: 54 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,122 +7,146 @@
77
],
88
"Plutus.V1.Address": [
99
"plutus-ledger-api",
10-
"v1::address",
10+
"v1",
11+
"address",
1112
"Address"
1213
],
1314
"Plutus.V1.Credential": [
1415
"plutus-ledger-api",
15-
"v1::address",
16+
"v1",
17+
"address",
1618
"Credential"
1719
],
1820
"Plutus.V1.StakingCredential": [
1921
"plutus-ledger-api",
20-
"v1::address",
22+
"v1",
23+
"address",
2124
"StakingCredential"
2225
],
2326
"Plutus.V1.PubKeyHash": [
2427
"plutus-ledger-api",
25-
"v1::crypto",
28+
"v1",
29+
"crypto",
2630
"Ed25519PubKeyHash"
2731
],
2832
"Plutus.V1.Bytes": [
2933
"plutus-ledger-api",
30-
"v1::crypto",
34+
"v1",
35+
"crypto",
3136
"LedgerBytes"
3237
],
3338
"Plutus.V1.Interval": [
3439
"plutus-ledger-api",
35-
"v1::interval",
40+
"v1",
41+
"interval",
3642
"Interval"
3743
],
3844
"Plutus.V1.Extended": [
3945
"plutus-ledger-api",
40-
"v1::interval",
46+
"v1",
47+
"interval",
4148
"Extended"
4249
],
4350
"Plutus.V1.LowerBound": [
4451
"plutus-ledger-api",
45-
"v1::interval",
52+
"v1",
53+
"interval",
4654
"LowerBound"
4755
],
4856
"Plutus.V1.UpperBound": [
4957
"plutus-ledger-api",
50-
"v1::interval",
58+
"v1",
59+
"interval",
5160
"UpperBound"
5261
],
5362
"Plutus.V1.POSIXTime": [
5463
"plutus-ledger-api",
55-
"v1::transaction",
64+
"v1",
65+
"transaction",
5666
"POSIXTime"
5767
],
5868
"Plutus.V1.POSIXTimeRange": [
5969
"plutus-ledger-api",
60-
"v1::transaction",
70+
"v1",
71+
"transaction",
6172
"POSIXTimeRange"
6273
],
6374
"Plutus.V1.Value": [
6475
"plutus-ledger-api",
65-
"v1::value",
76+
"v1",
77+
"value",
6678
"Value"
6779
],
6880
"Plutus.V1.CurrencySymbol": [
6981
"plutus-ledger-api",
70-
"v1::value",
82+
"v1",
83+
"value",
7184
"CurrencySymbol"
7285
],
7386
"Plutus.V1.AssetClass": [
7487
"plutus-ledger-api",
75-
"v1::value",
88+
"v1",
89+
"value",
7690
"AssetClass"
7791
],
7892
"Plutus.V1.TokenName": [
7993
"plutus-ledger-api",
80-
"v1::value",
94+
"v1",
95+
"value",
8196
"TokenName"
8297
],
8398
"Plutus.V1.Redeemer": [
8499
"plutus-ledger-api",
85-
"v1::redeemer",
100+
"v1",
101+
"redeemer",
86102
"Redeemer"
87103
],
88104
"Plutus.V1.Datum": [
89105
"plutus-ledger-api",
90-
"v1::datum",
106+
"v1",
107+
"datum",
91108
"Datum"
92109
],
93110
"Plutus.V1.DatumHash": [
94111
"plutus-ledger-api",
95-
"v1::datum",
112+
"v1",
113+
"datum",
96114
"DatumHash"
97115
],
98116
"Plutus.V1.RedeemerHash": [
99117
"plutus-ledger-api",
100-
"v1::redeemer",
118+
"v1",
119+
"redeemer",
101120
"RedeemerHash"
102121
],
103122
"Plutus.V1.ScriptHash": [
104123
"plutus-ledger-api",
105-
"v1::script",
124+
"v1",
125+
"script",
106126
"ScriptHash"
107127
],
108128
"Plutus.V1.TxInInfo": [
109129
"plutus-ledger-api",
110-
"v1::transaction",
130+
"v1",
131+
"transaction",
111132
"TxInInfo"
112133
],
113134
"Plutus.V1.TxId": [
114135
"plutus-ledger-api",
115-
"v1::transaction",
136+
"v1",
137+
"transaction",
116138
"TransactionHash"
117139
],
118140
"Plutus.V1.TxOut": [
119141
"plutus-ledger-api",
120-
"v1::transaction",
142+
"v1",
143+
"transaction",
121144
"TransactionOutput"
122145
],
123146
"Plutus.V1.TxOutRef": [
124147
"plutus-ledger-api",
125-
"v1::transaction",
148+
"v1",
149+
"transaction",
126150
"TransactionInput"
127151
],
128152
"Plutus.V1.Map": [
@@ -132,17 +156,20 @@
132156
],
133157
"Plutus.V2.TxInInfo": [
134158
"plutus-ledger-api",
135-
"v1::transaction",
159+
"v1",
160+
"transaction",
136161
"TxInInfo"
137162
],
138163
"Plutus.V2.OutputDatum": [
139164
"plutus-ledger-api",
140-
"v2::datum",
165+
"v2",
166+
"datum",
141167
"OutputDatum"
142168
],
143169
"Plutus.V2.TxOut": [
144170
"plutus-ledger-api",
145-
"v2::transaction",
171+
"v2",
172+
"transaction",
146173
"TransactionOutput"
147174
]
148175
},

lambda-buffers-codegen/data/rust-prelude-base.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
],
4141
"Prelude.Integer": [
4242
"num-bigint",
43-
"",
4443
"BigInt"
4544
],
4645
"Prelude.Bool": [

lambda-buffers-codegen/src/LambdaBuffers/Codegen/Rust/Config.hs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Data.Map (Map)
88
import Data.Map qualified as Map
99
import Data.Text (Text)
1010
import Data.Vector qualified as Vector
11+
import Debug.Trace (trace)
1112
import LambdaBuffers.Codegen.Config qualified as Config
1213
import LambdaBuffers.Codegen.Rust.Print.Syntax qualified as R
1314

@@ -27,19 +28,24 @@ instance FromJSON R.CrateName
2728

2829
instance FromJSONKey R.CrateName
2930

30-
instance (FromJSON a) => FromJSON (R.Qualified a) where
31+
instance FromJSON a => FromJSON (R.Qualified a) where
3132
parseJSON v = do
3233
A.withArray
3334
"Qualified"
3435
( \arr -> do
3536
case Vector.toList arr of
37+
[] -> fail "Cannot parse qualified entity, empty list is invalid"
3638
[a] -> R.Qualified'Builtin <$> parseJSON a
37-
[cn, mn, a] -> R.Qualified'LibRef <$> parseJSON cn <*> parseJSON mn <*> parseJSON a
38-
_ -> fail "Invalid Qualified"
39+
cn : parts -> do
40+
modules <- traverse parseJSON (init (trace (show parts) parts))
41+
R.Qualified'LibRef
42+
<$> parseJSON cn
43+
<*> pure (map R.MkModuleName modules)
44+
<*> parseJSON (last parts)
3945
)
4046
v
4147

42-
instance (ToJSON a) => ToJSON (R.Qualified a) where
48+
instance ToJSON a => ToJSON (R.Qualified a) where
4349
toJSON (R.Qualified'LibRef cn mn a) = A.Array $ Vector.fromList [toJSON cn, toJSON mn, toJSON a]
4450
toJSON (R.Qualified'Builtin a) = A.Array $ Vector.fromList [toJSON a]
4551

lambda-buffers-codegen/src/LambdaBuffers/Codegen/Rust/Print/Refs.hs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,20 @@
1-
module LambdaBuffers.Codegen.Rust.Print.Refs where
1+
module LambdaBuffers.Codegen.Rust.Print.Refs (
2+
caseIntERef,
3+
bigInt,
4+
vecAsSlice,
5+
vecMacro,
6+
boxNew,
7+
phantomData,
8+
debugTrait,
9+
fromU32Trait,
10+
fromStrTrait,
11+
cloneTrait,
12+
partialEqTrait,
13+
eqTrait,
14+
isPlutusDataTrait,
15+
jsonTrait,
16+
)
17+
where
218

319
import LambdaBuffers.Codegen.Rust.Print.Syntax qualified as R
420

@@ -9,7 +25,7 @@ bigInt :: R.QValName
925
bigInt = R.qForeignRef R.MkValueName "num-bigint" [] "BigInt"
1026

1127
vecAsSlice :: R.QValName
12-
vecAsSlice = R.qForeignRef R.MkValueName "lbr-prelude" ["lamval"] "case_int"
28+
vecAsSlice = R.qForeignRef R.MkValueName "std" ["vec", "Vec"] "as_slice"
1329

1430
vecMacro :: R.QValName
1531
vecMacro = R.qForeignRef R.MkValueName "std" [] "vec!"

0 commit comments

Comments
 (0)