rnacos 0.8.5

Nacos server re-implemented in Rust.
Documentation
use async_raft_ext::raft::{Entry, EntryPayload};

use self::model::LogRecordDto;

use super::store::ClientRequest;

pub mod core;
pub mod log;
pub mod model;
pub mod raftapply;
pub mod raftdata;
pub mod raftindex;
pub mod raftlog;
pub mod raftsnapshot;

pub struct StoreUtils;

impl StoreUtils {
    pub fn log_record_to_entry(record: LogRecordDto) -> anyhow::Result<Entry<ClientRequest>> {
        let payload = match serde_json::from_slice::<EntryPayload<ClientRequest>>(&record.value) {
            Ok(v) => v,
            Err(e) => {
                let value_str: String = String::from_utf8_lossy(&record.value)
                    .chars()
                    .take(2048)
                    .collect();
                return Err(anyhow::anyhow!(
                    "There is an error in the log format, {} ; index:{}, source value(take 2048):{}",
                    e,
                    record.index,
                    value_str
                ));
            }
        };
        let entry = Entry {
            term: record.term,
            index: record.index,
            payload,
        };
        Ok(entry)
    }

    pub fn entry_to_record(entry: &Entry<ClientRequest>) -> anyhow::Result<LogRecordDto> {
        let value = serde_json::to_vec(&entry.payload)?;
        let record = LogRecordDto {
            index: entry.index,
            term: entry.term,
            value,
        };
        Ok(record)
    }
}