kvsd 0.1.3

Simple key value store
Documentation
use crate::common::Result;
use crate::protocol::message::{MessageFrames, MessageType, Parse};
use crate::protocol::Value;

#[derive(Debug, Clone, PartialEq)]
pub(crate) struct Success {
    value: Option<Value>,
}

impl Success {
    pub(crate) fn new() -> Self {
        Self { value: None }
    }

    pub(crate) fn with_value(value: Value) -> Self {
        Self { value: Some(value) }
    }

    pub(crate) fn parse_frames(parse: &mut Parse) -> Result<Self> {
        let value = parse.next_bytes_or_null()?.and_then(|v| Value::new(v).ok());

        parse.expect_consumed()?;

        Ok(Self { value })
    }

    pub(crate) fn value(self) -> Option<Value> {
        self.value
    }
}
impl From<Success> for MessageFrames {
    fn from(success: Success) -> Self {
        let mut frames = MessageFrames::with_capacity(MessageType::Success, 1);

        match success.value {
            Some(value) => frames.push_bytes(value.into_boxed_bytes()),
            None => frames.push_null(),
        }

        frames
    }
}