@@ -90,100 +90,3 @@ namespace FormatOf
9090  simple_glyph =  FormatOf . do 
9191    flag <-  flag
9292    pure (flag. repeat  +  1 )
93- 
94- 
95- --  Thinking about compilation
96- 
97- namespace Rust 
98- 
99-   data  RType  :  Type  where 
100-     Var  :  String ->  RType
101-     U8  :  RType
102-     U16  :  RType
103-     U32  :  RType
104-     U64  :  RType
105-     I8  :  RType
106-     I16  :  RType
107-     I32  :  RType
108-     I64  :  RType
109-     Never  :  RType
110-     Tuple  :  List  RType ->  RType
111-     Vec  :  RType ->  RType
112- 
113-   data  Item  :  Type  where 
114-     Struct  :  List  (String, RType) ->  Item
115-     Enum  :  List  (String, RType) ->  Item
116-     DecodeFn  :  ()  ->  Item
117-     EncodeFn  :  ()  ->  Item
118- 
119-   record Module  where 
120-     constructor MkModule 
121-     items  :  List  (String, Item)
122- 
123- 
124- namespace Compile 
125- 
126-   --  TODO: Cache compilations of definitions
127-   --        eg. of structs, enums, endocers and decoders
128- 
129- 
130-   compileFormat  :  Format ->  (Rust.Module ->  Maybe  Rust.Module)
131-   compileFormat f = 
132-     --  compile rep
133-     --  compile decode
134-     --  compile encode
135-     ? todo_compileFormat
136- 
137- 
138-   compileRep  :  (f  : Format) ->  Maybe  Rust.RType
139-   compileRep End  =  Just  (Rust . Tuple  [])
140-   compileRep Fail  =  Just  (Rust . Never )
141-   compileRep (Ignore  _  _ ) =  Just  (Rust . Tuple  [])
142-   compileRep (Repeat  _  f) = 
143-     Just  (Rust . Vec  ! (compileRep f)) --  TODO: Compile to a contract? Or maybe a
144-                                     --        fixed size array if the length is known
145-                                     --        or just throw away the info
146-   compileRep (Pure  x) = 
147-     ? todo_compileSingRep --  TODO: interpret an Idris type as a Rust type??
148-                          --        perhaps we need to restrict this?
149-   compileRep (Pair  f1 f2) = 
150-     Just  (Rust . Tuple 
151-       [ ! (compileRep f1)
152-       , ! (compileRep f2)
153-       ])
154-   compileRep (Bind  f1 f2) = 
155-     Just  (Tuple 
156-       [ ! (compileRep f1)
157-       , ! (compileRep (f2 ? todo_compileBind_x))  --  TODO: how to bind the output?
158-                                                 --        enum based on the values of `x : Rep f1`?
159-                                                 --        depends on how `x` is used inside `f2`
160-       ])
161-   compileRep (Custom  f) = 
162-     --  TODO: f.RustRep
163-     Nothing 
164- 
165- 
166-   compileDecode  :  Format ->  (Rust.Module ->  Maybe  Rust.Module)
167-   compileDecode End  =  ? todo_compileDecodeEnd
168-   compileDecode Fail  =  ? todo_compileDecodeFail
169-   compileDecode (Pure  x) =  ? todo_compileDecodePure
170-   compileDecode (Ignore  f _ ) =  ? todo_compileDecodeIgnore
171-   compileDecode (Repeat  len f) =  ? todo_compileDecodeRepeat
172-   compileDecode (Pair  f1 f2) =  ? todo_compileDecodePair
173-   compileDecode (Bind  f1 f2) =  ? todo_compileDecodeBind
174-   compileDecode (Custom  f) = 
175-     --  TODO: f.rustDecode
176-     ? todo_compileDecodeCustom
177- 
178- 
179-   compileEncode  :  Format ->  (Rust.Module ->  Maybe  Rust.Module)
180-   compileEncode End  =  ? todo_compileEncodeEnd
181-   compileEncode Fail  =  ? todo_compileEncodeFail
182-   compileEncode (Pure  x) =  ? todo_compileEncodePure
183-   compileEncode (Ignore  f def) =  ? todo_compileEncodeIgnore
184-   compileEncode (Repeat  len f) =  ? todo_compileEncodeRepeat
185-   compileEncode (Pair  f1 f2) =  ? todo_compileEncodePair
186-   compileEncode (Bind  f1 f2) =  ? todo_compileEncodeBind
187-   compileEncode (Custom  f) = 
188-     --  TODO: f.rustEncode
189-     ? todo_compileEncodeCustom
0 commit comments