Add a `revhex` utility command to reverse endianness.
This makes it easier to translate block hashes output by our debug logs into the format used by other tools.
This commit is contained in:
parent
80e7ee6dae
commit
b951f13f06
|
|
@ -2,12 +2,14 @@
|
||||||
|
|
||||||
mod config;
|
mod config;
|
||||||
mod connect;
|
mod connect;
|
||||||
|
mod revhex;
|
||||||
mod seed;
|
mod seed;
|
||||||
mod start;
|
mod start;
|
||||||
mod version;
|
mod version;
|
||||||
|
|
||||||
use self::{
|
use self::{
|
||||||
config::ConfigCmd, connect::ConnectCmd, seed::SeedCmd, start::StartCmd, version::VersionCmd,
|
config::ConfigCmd, connect::ConnectCmd, revhex::RevhexCmd, seed::SeedCmd, start::StartCmd,
|
||||||
|
version::VersionCmd,
|
||||||
};
|
};
|
||||||
use crate::config::ZebradConfig;
|
use crate::config::ZebradConfig;
|
||||||
use abscissa_core::{
|
use abscissa_core::{
|
||||||
|
|
@ -21,29 +23,33 @@ pub const CONFIG_FILE: &str = "zebrad.toml";
|
||||||
/// Zebrad Subcommands
|
/// Zebrad Subcommands
|
||||||
#[derive(Command, Debug, Options, Runnable)]
|
#[derive(Command, Debug, Options, Runnable)]
|
||||||
pub enum ZebradCmd {
|
pub enum ZebradCmd {
|
||||||
/// The `help` subcommand
|
|
||||||
#[options(help = "get usage information")]
|
|
||||||
Help(Help<Self>),
|
|
||||||
|
|
||||||
/// The `start` subcommand
|
|
||||||
#[options(help = "start the application")]
|
|
||||||
Start(StartCmd),
|
|
||||||
|
|
||||||
/// The `config` subcommand
|
/// The `config` subcommand
|
||||||
#[options(help = "generate a skeleton configuration")]
|
#[options(help = "generate a skeleton configuration")]
|
||||||
Config(ConfigCmd),
|
Config(ConfigCmd),
|
||||||
|
|
||||||
/// The `version` subcommand
|
|
||||||
#[options(help = "display version information")]
|
|
||||||
Version(VersionCmd),
|
|
||||||
|
|
||||||
/// The `connect` subcommand
|
/// The `connect` subcommand
|
||||||
#[options(help = "testing stub for dumping network messages")]
|
#[options(help = "testing stub for dumping network messages")]
|
||||||
Connect(ConnectCmd),
|
Connect(ConnectCmd),
|
||||||
|
|
||||||
|
/// The `help` subcommand
|
||||||
|
#[options(help = "get usage information")]
|
||||||
|
Help(Help<Self>),
|
||||||
|
|
||||||
|
/// The `revhex` subcommand
|
||||||
|
#[options(help = "reverses the endianness of a hex string, like a block or transaction hash")]
|
||||||
|
Revhex(RevhexCmd),
|
||||||
|
|
||||||
/// The `seed` subcommand
|
/// The `seed` subcommand
|
||||||
#[options(help = "dns seeder")]
|
#[options(help = "dns seeder")]
|
||||||
Seed(SeedCmd),
|
Seed(SeedCmd),
|
||||||
|
|
||||||
|
/// The `start` subcommand
|
||||||
|
#[options(help = "start the application")]
|
||||||
|
Start(StartCmd),
|
||||||
|
|
||||||
|
/// The `version` subcommand
|
||||||
|
#[options(help = "display version information")]
|
||||||
|
Version(VersionCmd),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This trait allows you to define how application configuration is loaded.
|
/// This trait allows you to define how application configuration is loaded.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
//! `revhex` subcommand - reverses hex endianness.
|
||||||
|
|
||||||
|
#![allow(clippy::never_loop)]
|
||||||
|
|
||||||
|
use abscissa_core::{Command, Options, Runnable};
|
||||||
|
|
||||||
|
/// `revhex` subcommand
|
||||||
|
#[derive(Command, Debug, Default, Options)]
|
||||||
|
pub struct RevhexCmd {
|
||||||
|
/// The hex string whose endianness will be reversed.
|
||||||
|
#[options(free)]
|
||||||
|
input: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Runnable for RevhexCmd {
|
||||||
|
/// Print endian-reversed hex string.
|
||||||
|
fn run(&self) {
|
||||||
|
println!(
|
||||||
|
"{}",
|
||||||
|
String::from_utf8(
|
||||||
|
self.input
|
||||||
|
.as_bytes()
|
||||||
|
.chunks(2)
|
||||||
|
.rev()
|
||||||
|
.map(|c| c.iter())
|
||||||
|
.flatten()
|
||||||
|
.cloned()
|
||||||
|
.collect::<Vec<u8>>(),
|
||||||
|
)
|
||||||
|
.expect("input should be ascii")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue