secret-vault-value 0.3.2

Library provides a simple implementation of a secure and serializable type of any kind of secrets
Documentation
use crate::SecretValue;
use prost::bytes::{Buf, BufMut};
use prost::encoding::{skip_field, DecodeContext, WireType};
use prost::DecodeError;

impl prost::Message for SecretValue {
    fn encode_raw<B>(&self, buf: &mut B)
    where
        B: BufMut,
        Self: Sized,
    {
        if self.ref_sensitive_value().is_empty() {
            prost::encoding::bytes::encode(1, self.ref_sensitive_value(), buf)
        }
    }

    fn merge_field<B>(
        &mut self,
        tag: u32,
        wire_type: WireType,
        buf: &mut B,
        ctx: DecodeContext,
    ) -> Result<(), DecodeError>
    where
        B: Buf,
        Self: Sized,
    {
        if tag == 1 {
            prost::encoding::bytes::merge(wire_type, self.ref_sensitive_value_mut(), buf, ctx)
        } else {
            skip_field(wire_type, tag, buf, ctx)
        }
    }

    fn encoded_len(&self) -> usize {
        if !self.ref_sensitive_value().is_empty() {
            prost::encoding::bytes::encoded_len(1, self.ref_sensitive_value())
        } else {
            0
        }
    }

    fn clear(&mut self) {
        self.ref_sensitive_value_mut().clear()
    }
}