sark-core 0.11.0

the L7 layer for dope
Documentation
use super::consts::{CRLF, DATE_PREFIX, SERVER_LINE, STATUS_LINE_PREFIX};

pub(in crate::http::response) struct WireWriter<'a> {
    out: &'a mut [u8],
    offset: usize,
}

impl<'a> WireWriter<'a> {
    pub(in crate::http::response) fn new(out: &'a mut [u8]) -> Self {
        Self { out, offset: 0 }
    }

    pub(in crate::http::response) fn at(out: &'a mut [u8], offset: usize) -> Self {
        Self { out, offset }
    }

    pub(in crate::http::response) fn len(&self) -> usize {
        self.offset
    }

    pub(in crate::http::response) fn put(&mut self, bytes: &[u8]) {
        let end = self.offset + bytes.len();
        self.out[self.offset..end].copy_from_slice(bytes);
        self.offset = end;
    }

    pub(in crate::http::response) fn put_decimal(&mut self, value: usize) {
        self.offset += crate::http::codec::Wire::write_dec(value, &mut self.out[self.offset..]);
    }

    pub(in crate::http::response) fn put_status_line(&mut self, status_str: &[u8], reason: &[u8]) {
        self.put(STATUS_LINE_PREFIX);
        self.put(status_str);
        self.put(b" ");
        self.put(reason);
        self.put(CRLF);
    }

    pub(in crate::http::response) fn put_server_date_terminator(
        &mut self,
        date: &[u8; 29],
    ) -> usize {
        self.put(SERVER_LINE);
        self.put(DATE_PREFIX);
        let date_offset = self.offset;
        self.put(date);
        self.put(CRLF);
        self.put(CRLF);
        date_offset
    }
}