Added a string printer and updated README
ci/woodpecker/push/woodpecker Pipeline failed
Details
ci/woodpecker/push/woodpecker Pipeline failed
Details
+ Fixed a unit test as wellmain
parent
3274386ccf
commit
333a92b729
|
@ -40,6 +40,12 @@ Members:
|
||||||
* `Format`: Allows formats to include other formats
|
* `Format`: Allows formats to include other formats
|
||||||
* `format_name`: Format definition to use
|
* `format_name`: Format definition to use
|
||||||
|
|
||||||
|
#### Print Types
|
||||||
|
* `Base`: print out the field as of a number of `base` N
|
||||||
|
* `ByteArray`: display the field as an array of bytes
|
||||||
|
* `String`: view fields as a string field
|
||||||
|
* `Default`: use the default printer for the source type
|
||||||
|
|
||||||
#### Example Config
|
#### Example Config
|
||||||
[Example](./formats/example.toml)
|
[Example](./formats/example.toml)
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ field_type = {type = "String", endianness = "BigEndian", max_len = 55}
|
||||||
# byte field
|
# byte field
|
||||||
[[formats.fields]]
|
[[formats.fields]]
|
||||||
name = "bytes field"
|
name = "bytes field"
|
||||||
|
print_type = {print = "String"}
|
||||||
field_type = {type = "Bytes", endianness = "BigEndian", max_len = 5}
|
field_type = {type = "Bytes", endianness = "BigEndian", max_len = 5}
|
||||||
|
|
||||||
# Example of layer formats
|
# Example of layer formats
|
||||||
|
|
|
@ -745,6 +745,6 @@ mod tests {
|
||||||
let (output, width) = field.format_data(&mut byte_stream, 0, &config).unwrap();
|
let (output, width) = field.format_data(&mut byte_stream, 0, &config).unwrap();
|
||||||
|
|
||||||
assert_eq!(width, 40);
|
assert_eq!(width, 40);
|
||||||
assert_eq!(output, "test: Test\n")
|
assert_eq!(output, "\ntest: Test\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,20 +18,15 @@ pub fn base_notation(b: u32) -> String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Clone)]
|
#[derive(Debug, Deserialize, Clone, Default)]
|
||||||
#[serde(tag = "print")]
|
#[serde(tag = "print")]
|
||||||
pub enum PrintType {
|
pub enum PrintType {
|
||||||
Base { base: u32 },
|
Base { base: u32 },
|
||||||
ByteArray,
|
ByteArray,
|
||||||
|
String,
|
||||||
|
#[default]
|
||||||
Default,
|
Default,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for PrintType {
|
|
||||||
fn default() -> Self {
|
|
||||||
PrintType::Default
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PrintType {
|
impl PrintType {
|
||||||
pub fn print_big_int<T: ByteOrderOperations>(&self, big_int: BigInt) -> String {
|
pub fn print_big_int<T: ByteOrderOperations>(&self, big_int: BigInt) -> String {
|
||||||
match self {
|
match self {
|
||||||
|
@ -39,7 +34,7 @@ impl PrintType {
|
||||||
format!("{}{}", base_notation(*b), big_int.to_str_radix(*b))
|
format!("{}{}", base_notation(*b), big_int.to_str_radix(*b))
|
||||||
}
|
}
|
||||||
PrintType::ByteArray => print_bytes_as_array(&T::big_int_to_bytes(big_int)),
|
PrintType::ByteArray => print_bytes_as_array(&T::big_int_to_bytes(big_int)),
|
||||||
PrintType::Default => big_int.to_string(),
|
_ => big_int.to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +44,7 @@ impl PrintType {
|
||||||
format!("{}{}", base_notation(*b), big_int.to_str_radix(*b))
|
format!("{}{}", base_notation(*b), big_int.to_str_radix(*b))
|
||||||
}
|
}
|
||||||
PrintType::ByteArray => print_bytes_as_array(&T::big_u_int_to_bytes(big_int)),
|
PrintType::ByteArray => print_bytes_as_array(&T::big_u_int_to_bytes(big_int)),
|
||||||
PrintType::Default => big_int.to_string(),
|
_ => big_int.to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +71,10 @@ impl PrintType {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_bytes(&self, bytes: &[u8]) -> String {
|
pub fn print_bytes(&self, bytes: &[u8]) -> String {
|
||||||
print_bytes_as_array(bytes)
|
match self {
|
||||||
|
PrintType::String => std::str::from_utf8(bytes).unwrap().to_string(),
|
||||||
|
_ => print_bytes_as_array(bytes)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_string(&self, s: &str) -> String {
|
pub fn print_string(&self, s: &str) -> String {
|
||||||
|
|
|
@ -72,8 +72,7 @@ impl InputTypes {
|
||||||
let str_arr = if src.len() == 1 {
|
let str_arr = if src.len() == 1 {
|
||||||
src[0]
|
src[0]
|
||||||
.replace(',', " ")
|
.replace(',', " ")
|
||||||
.replace('[', "")
|
.replace(['[', ']'], "")
|
||||||
.replace(']', "")
|
|
||||||
.split_whitespace()
|
.split_whitespace()
|
||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
.collect()
|
.collect()
|
||||||
|
|
Loading…
Reference in New Issue