dtr_to_rust 0.0.9 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c1b886c52baf81105bc299619682bcca98bc31e80fae633241bd5fabfcc9df4
4
- data.tar.gz: 59d69ab207c8c293ea91ada01691e9282eafc62274846cb78cba76d3ef5323a8
3
+ metadata.gz: '09b756bf37e167df02e974971834a123d3b438c5a5768e7e805bfae856025b09'
4
+ data.tar.gz: 47cc9f7c44c6243d7a94c25078dd0e0a0f61f04d0a5e61457456a83b3a7cd376
5
5
  SHA512:
6
- metadata.gz: ee8323788b1676913b11cab4c24076ad0bfe09a7327fd48b7754d4beaa13b2b18b9eb9ba72faa82e1c7bc8405bf633b87652535c3c068e04fc1b6e66cf94444b
7
- data.tar.gz: 3a6df6377e896aeb61b14ccea0ed7425eab24aa92db8ae37b632224a7688da4db369fda4bc4545bc2d46eaa7a3b68d98e6c64f9807520ed928901767e25b1756
6
+ metadata.gz: fa41aa6b0c38c4e7b281a9608cfed8a23a1138ac95ab005d0c003091d7c55f542090611cf19d0e8dcbdd8f718beb15b605ca8ae7a0f59659f2c393e68aaf146e
7
+ data.tar.gz: b8faac69f6f1bd65b19ce199fad3a085eaa4f04aff2db10d48f4340a459ceece6cd80265deb54382609351b6507367499fe1826e5a6f7026a8d92103cb1af9a7
@@ -13,12 +13,12 @@ module DTRToRust
13
13
  end
14
14
 
15
15
  def interpret
16
- if variable?(@input)
17
- variable_return(@input)
16
+ if number?(@input)
17
+ number_return(@input)
18
18
  elsif string?(@input)
19
19
  string_return(@input)
20
- elsif number?(@input)
21
- number_return(@input)
20
+ else
21
+ variable_return(@input)
22
22
  end
23
23
  end
24
24
 
@@ -44,11 +44,19 @@ module DTRToRust
44
44
 
45
45
  ## Number ##
46
46
  def number?(input)
47
- input.is_a?(Numeric)
47
+ input.is_a?(Numeric) || input&.match?(/^\s*\d+\.?\d*\s*$/)
48
48
  end
49
49
 
50
50
  def number_return(_input)
51
- { value: @input, type: 'number', needs_reference: false }
51
+ { value: contains_decimal?(@input.to_s) ? @input.to_f : @input.to_i, type: 'number', needs_reference: false }
52
+ end
53
+
54
+ def contains_decimal?(str)
55
+ # Define a regular expression pattern for a decimal number
56
+ decimal_pattern = /\d+\.\d+/
57
+
58
+ # Check if the string matches the pattern
59
+ !!(str =~ decimal_pattern)
52
60
  end
53
61
  end
54
62
  end
data/lib/generator.rb CHANGED
@@ -44,11 +44,13 @@ module DTRToRust
44
44
  def generate_state
45
45
  return if dtr_contract.state.nil?
46
46
 
47
- @content += 'pub struct State {'
48
- dtr_contract.state.each do |state|
49
- @content += " pub #{state.name}: #{state.type},"
47
+ dtr_contract.state.each do |state_value|
48
+ if state_value.type == 'String'
49
+ @content += "const #{state_value.name}: Symbol = symbol_short!(\"#{state_value.initial_value}\");\n"
50
+ end
50
51
  end
51
- @content += "}\n\n"
52
+
53
+ @content += "\n"
52
54
  end
53
55
 
54
56
  def generate_functions
@@ -33,10 +33,6 @@ module DTRToRust
33
33
  decorated_input[:value]
34
34
  end
35
35
  end
36
-
37
- def variable?(input)
38
- !input.contains?('"') && !input.contains?("'") && !input.match?(/$\d+/)
39
- end
40
36
  end
41
37
  end
42
38
  end
@@ -5,7 +5,23 @@ module DTRToRust
5
5
  # This class is responsible for generating Rust code for the LogString instruction.
6
6
  class LogString < Handler
7
7
  def handle
8
- form_rust_string("log!(#{@instruction[:inputs].join(',')});", @instruction[:scope])
8
+ form_rust_string("log!(#{inputs_to_rust_string(@instruction[:inputs])});", @instruction[:scope])
9
+ end
10
+
11
+ private
12
+
13
+ def inputs_to_rust_string(inputs)
14
+ inputs.map { |input| ref_appender(input) }.join(', ')
15
+ end
16
+
17
+ def ref_appender(input)
18
+ decorated_input = Common::InputInterpreter.interpret(input)
19
+
20
+ if decorated_input[:needs_reference]
21
+ "&#{decorated_input[:value]}"
22
+ else
23
+ decorated_input[:value]
24
+ end
9
25
  end
10
26
  end
11
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtr_to_rust
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Durst