use crate::{handling::routes::Body, utils::mime::mime_enum::Mime};

pub trait ResponseBody: Send {
    fn get_data(&self) -> Vec<u8>;
    fn get_mime(&self) -> Mime;
    fn get_len(&self) -> usize;
}

impl ResponseBody for Body {
    fn get_data(&self) -> Vec<u8> {
        self.body()
    }
    fn get_mime(&self) -> Mime {
        self.mime_type()
    }

    fn get_len(&self) -> usize {
        self.get_data().len()
    }
}

impl ResponseBody for &str {
    fn get_data(&self) -> Vec<u8> {
        self.as_bytes().to_vec()
    }

    fn get_mime(&self) -> Mime {
        Mime::TextPlain
    }

    fn get_len(&self) -> usize {
        self.len()
    }
}

impl ResponseBody for String {
    fn get_data(&self) -> Vec<u8> {
        self.as_bytes().to_vec()
    }

    fn get_mime(&self) -> Mime {
        Mime::TextPlain
    }

    fn get_len(&self) -> usize {
        self.len()
    }
}