Skip to content

Commit

Permalink
Refactor and JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
skilesare committed Jan 3, 2023
1 parent 2f238a7 commit f46a585
Show file tree
Hide file tree
Showing 7 changed files with 2,473 additions and 2,366 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,10 @@ Note: This project was a part of the [ARAMAKME expirament](https://hwqwz-ryaaa-a

printf "yes" | bash test_runner.sh

## Release

v0.1.12

* Refactor - Cleaned up code
* JSON - added a library to dump values to JSON

51 changes: 20 additions & 31 deletions src/clone.mo
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,25 @@ import Array "mo:base/Array";

module {

type CandyValue = Types.CandyValue;
type CandyValueUnstable = Types.CandyValueUnstable;
type PropertyUnstable = Types.PropertyUnstable;


public func cloneValueUnstable(val : CandyValueUnstable) : CandyValueUnstable{
switch(val){
case(#Class(val)){

return #Class(Array.tabulate<PropertyUnstable>(val.size(), func(idx){
{name= val[idx].name; value=cloneValueUnstable(val[idx].value); immutable = val[idx].immutable};
}));
};
case(#Bytes(val)){
switch(val){
case(#frozen(val)){

#Bytes(#frozen(val));
};
case(#thawed(val)){

#Bytes(#thawed(val.clone()));
};
}
};
case(_){

val;
}
};
type CandyValue = Types.CandyValue;
type CandyValueUnstable = Types.CandyValueUnstable;
type PropertyUnstable = Types.PropertyUnstable;

public func cloneValueUnstable(val : CandyValueUnstable) : CandyValueUnstable{
switch(val){
case(#Class(val)){

return #Class(Array.tabulate<PropertyUnstable>(val.size(), func(idx){
{name= val[idx].name; value=cloneValueUnstable(val[idx].value); immutable = val[idx].immutable};
}));
};
case(#Bytes(val)){
switch(val){
case(#frozen(val)) #Bytes(#frozen(val));
case(#thawed(val)) #Bytes(#thawed(val.clone()));
};

};
case(_) val;
};
};
}
2,450 changes: 1,225 additions & 1,225 deletions src/conversion.mo

Large diffs are not rendered by default.

143 changes: 143 additions & 0 deletions src/json.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@

import Buffer "mo:base/Buffer";
import Nat "mo:base/Nat";
import Nat16 "mo:base/Nat16";
import Nat32 "mo:base/Nat32";
import Nat64 "mo:base/Nat64";
import Nat8 "mo:base/Nat8";
import Float "mo:base/Float";
import Int "mo:base/Int";
import Int8 "mo:base/Int8";
import Int16 "mo:base/Int16";
import Int32 "mo:base/Int32";
import Int64 "mo:base/Int64";
import Bool "mo:base/Bool";
import Blob "mo:base/Blob";
import Principal "mo:base/Principal";
import Text "mo:base/Text";

import Types "types";
import CandyHex "hex";

module {
//convert a candy value to JSON
public func value_to_json(val: Types.CandyValue): Text {
switch(val){
//nat
case(#Nat(val)){ Nat.toText(val)};
case(#Nat64(val)){ Nat64.toText(val)};
case(#Nat32(val)){ Nat32.toText(val)};
case(#Nat16(val)){ Nat16.toText(val)};
case(#Nat8(val)){ Nat8.toText(val)};
//text
case(#Text(val)){ "\"" # val # "\""; };
//class
case(#Class(val)){
var body: Buffer.Buffer<Text> = Buffer.Buffer<Text>(1);
for(this_item in val.vals()){
body.add("\"" # this_item.name # "\"" # ":" # value_to_json(this_item.value));
};

return "{" # Text.join(",", body.vals()) # "}";
};
//array
case(#Array(val)){
switch(val){
case(#frozen(val)){
var body: Buffer.Buffer<Text> = Buffer.Buffer<Text>(1);
for(this_item in val.vals()){
body.add(value_to_json(this_item));
};

return "[" # Text.join(",", body.vals()) # "]";
};
case(#thawed(val)){
var body: Buffer.Buffer<Text> = Buffer.Buffer<Text>(1);
for(this_item in val.vals()){
body.add(value_to_json(this_item));
};

return "[" # Text.join(",", body.vals()) # "]";
};
};
};
case(#Option(val)){
switch(val){
case(null){"null";};
case(?val){value_to_json(val);}
}
};
case(#Nats(val)){
switch(val){
case(#frozen(val)){
var body: Buffer.Buffer<Text> = Buffer.Buffer<Text>(1);
for(this_item in val.vals()){
body.add(Nat.toText(this_item));
};

return "[" # Text.join(",", body.vals()) # "]";
};
case(#thawed(val)){
var body: Buffer.Buffer<Text> = Buffer.Buffer<Text>(1);
for(this_item in val.vals()){
body.add(Nat.toText(this_item));
};

return "[" # Text.join(",", body.vals()) # "]";
};
};
};
case(#Floats(val)){
switch(val){
case(#frozen(val)){
var body: Buffer.Buffer<Text> = Buffer.Buffer<Text>(1);
for(this_item in val.vals()){
body.add(Float.toText(this_item));
};

return "[" # Text.join(",", body.vals()) # "]";
};
case(#thawed(val)){
var body: Buffer.Buffer<Text> = Buffer.Buffer<Text>(1);
for(this_item in val.vals()){
body.add(Float.toText(this_item));
};

return "[" # Text.join(",", body.vals()) # "]";
};
};
};
//bytes
case(#Bytes(val)){
switch(val){
case(#frozen(val)){
return "\"" # CandyHex.encode(val) # "\"";//CandyHex.encode(val);
};
case(#thawed(val)){
return "\"" # CandyHex.encode(val) # "\"";//CandyHex.encode(val);
};
};
};
//bytes
case(#Blob(val)){

return "\"" # CandyHex.encode(Blob.toArray(val)) # "\"";//CandyHex.encode(val);

};
//principal
case(#Principal(val)){ "\"" # Principal.toText(val) # "\"";};
//bool
case(#Bool(val)){ "\"" # Bool.toText(val) # "\"";};

//float
case(#Float(val)){ Float.format(#exact, val) ;};
case(#Empty){ "null";};
case(#Int(val)){Int.toText(val);};
case(#Int64(val)){Int64.toText(val);};
case(#Int32(val)){Int32.toText(val);};
case(#Int16(val)){Int16.toText(val);};
case(#Int8(val)){Int8.toText(val);};
case(_){"";};
};
};
};
Loading

0 comments on commit f46a585

Please sign in to comment.