Skip to content

Commit b78c193

Browse files
committed
feat(rad): new RadonInteger operators
1 parent 9836608 commit b78c193

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rad/src/operators/integer.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use serde_cbor::value::{Value, from_value};
55
use crate::{
66
error::RadError,
77
types::{
8-
RadonType, boolean::RadonBoolean, float::RadonFloat, integer::RadonInteger,
9-
string::RadonString,
8+
RadonType, boolean::RadonBoolean, bytes::RadonBytes, float::RadonFloat,
9+
integer::RadonInteger, string::RadonString,
1010
},
1111
};
1212

@@ -20,6 +20,20 @@ pub fn absolute(input: &RadonInteger) -> Result<RadonInteger, RadError> {
2020
}
2121
}
2222

23+
pub fn to_bytes(input: RadonInteger) -> Result<RadonBytes, RadError> {
24+
let mut bytes_array = [0u8; 16];
25+
bytes_array.copy_from_slice(&input.value().to_be_bytes());
26+
let mut leading_zeros = 0;
27+
for i in 0..bytes_array.len() {
28+
if bytes_array[i] != 0u8 {
29+
break;
30+
} else {
31+
leading_zeros += 1;
32+
}
33+
}
34+
Ok(RadonBytes::from(bytes_array[leading_zeros..].to_vec()))
35+
}
36+
2337
pub fn to_float(input: RadonInteger) -> Result<RadonFloat, RadError> {
2438
RadonFloat::try_from(Value::Integer(input.value()))
2539
}

rad/src/operators/mod.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,15 @@ pub enum RadonOpCodes {
5858
///////////////////////////////////////////////////////////////////////
5959
// Integer operator codes (start at 0x40)
6060
IntegerAbsolute = 0x40,
61-
IntegerAsFloat = 0x41,
62-
IntegerAsString = 0x42,
6361
IntegerGreaterThan = 0x43,
6462
IntegerLessThan = 0x44,
65-
// IntegerMatch = 0x45,
6663
IntegerModulo = 0x46,
6764
IntegerMultiply = 0x47,
6865
IntegerNegate = 0x48,
6966
IntegerPower = 0x49,
70-
// IntegerReciprocal = 0x4A,
67+
IntegerToBytes = 0x4A,
68+
IntegerToFloat = 0x41,
69+
IntegerToString = 0x42,
7170
// IntegerSum = 0x4B,
7271
///////////////////////////////////////////////////////////////////////
7372
// Float operator codes (start at 0x50)

rad/src/types/integer.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,6 @@ impl Operable for RadonInteger {
105105
(RadonOpCodes::IntegerAbsolute, None) => {
106106
integer_operators::absolute(self).map(RadonTypes::from)
107107
}
108-
(RadonOpCodes::IntegerAsFloat, None) => {
109-
integer_operators::to_float(self.clone()).map(RadonTypes::from)
110-
}
111-
(RadonOpCodes::IntegerAsString, None) => {
112-
integer_operators::to_string(self.clone()).map(RadonTypes::from)
113-
}
114108
(RadonOpCodes::IntegerGreaterThan, Some(args)) => {
115109
integer_operators::greater_than(self, args).map(Into::into)
116110
}
@@ -129,6 +123,15 @@ impl Operable for RadonInteger {
129123
(RadonOpCodes::IntegerPower, Some(args)) => {
130124
integer_operators::power(self, args.as_slice()).map(Into::into)
131125
}
126+
(RadonOpCodes::IntegerToBytes, None) => integer_operators::to_bytes(self.clone())
127+
.map(RadonTypes::from)
128+
.map_err(Into::into),
129+
(RadonOpCodes::IntegerToFloat, None) => {
130+
integer_operators::to_float(self.clone()).map(RadonTypes::from)
131+
}
132+
(RadonOpCodes::IntegerToString, None) => {
133+
integer_operators::to_string(self.clone()).map(RadonTypes::from)
134+
}
132135
// Unsupported / unimplemented
133136
(op_code, args) => Err(RadError::UnsupportedOperator {
134137
input_type: RADON_INTEGER_TYPE_NAME.to_string(),

0 commit comments

Comments
 (0)