bitcoind-log-parser 0.1.3

Parse Bitcoind Log Lines
Documentation
use crate::log_line::log_message::message::Message;
use crate::log_line::log_message::parse_error::ParseError;
use crate::log_line::log_message::parse_result::ParseResult;
use crate::utils::get_key_value_from_key_value_string;

#[derive(Debug)]
pub struct NewPoWValidBlockMessage {
    hash: String,
}

impl Message<Self> for NewPoWValidBlockMessage {
    fn is_valid(raw_message: &str) -> bool {
        let is_valid = raw_message.starts_with("NewPoWValidBlock:");
        is_valid
    }
    fn parse(raw_message: &str) -> ParseResult<Self> {
        if !Self::is_valid(raw_message) {
            return Err(ParseError);
        } else {
            let message_split_by_spaces: Vec<&str> = raw_message.split_whitespace().collect();
            let hash_key_value_str = message_split_by_spaces[2];
            let hash_key_value = get_key_value_from_key_value_string(hash_key_value_str);
            let hash_value = hash_key_value[1];
            Ok(Self {
                hash: hash_value.to_string(),
            })
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn parse_npowvbm_works() {
        let raw_message = "NewPoWValidBlock: block hash=00000000000000000006778a7fb1adf22b4fe6ae58401ae1e61baa4394397ae0";
        let message_result = NewPoWValidBlockMessage::parse(&raw_message);
        let hash = message_result.unwrap().hash;
        assert_eq!(
            hash,
            "00000000000000000006778a7fb1adf22b4fe6ae58401ae1e61baa4394397ae0"
        );

        let raw_message = "NewPoWValidBlock: block hash=123456789";
        let message_result = NewPoWValidBlockMessage::parse(&raw_message);
        let hash = message_result.unwrap().hash;
        assert_eq!(hash, "123456789");

        let raw_message = "no valid";
        let message = NewPoWValidBlockMessage::parse(&raw_message);
        assert!(message.is_err());
    }

    #[test]
    fn is_valid_works() {
        let raw_message = "NewPoWValidBlock: block hash=00000000000000000006778a7fb1adf22b4fe6ae58401ae1e61baa4394397ae0";
        let is_valid = NewPoWValidBlockMessage::is_valid(&raw_message);
        assert_eq!(is_valid, true);

        let raw_message = "no valid";
        let is_valid = NewPoWValidBlockMessage::is_valid(&raw_message);
        assert_eq!(is_valid, false);
    }
}