varnish_sys/vcl/
str_or_bytes.rs

1use std::str::from_utf8;
2
3#[derive(Debug)]
4pub enum StrOrBytes<'a> {
5    Utf8(&'a str),
6    Bytes(&'a [u8]),
7}
8
9impl<'a> From<&'a str> for StrOrBytes<'a> {
10    fn from(value: &'a str) -> Self {
11        StrOrBytes::Utf8(value)
12    }
13}
14
15impl<'a> From<&'a String> for StrOrBytes<'a> {
16    fn from(value: &'a String) -> Self {
17        StrOrBytes::Utf8(value.as_str())
18    }
19}
20
21impl<'a> From<&'a [u8]> for StrOrBytes<'a> {
22    fn from(value: &'a [u8]) -> Self {
23        from_utf8(value).map_or_else(|_| StrOrBytes::Bytes(value), StrOrBytes::Utf8)
24    }
25}
26
27impl AsRef<[u8]> for StrOrBytes<'_> {
28    fn as_ref(&self) -> &[u8] {
29        match self {
30            StrOrBytes::Utf8(s) => s.as_bytes(),
31            StrOrBytes::Bytes(b) => b,
32        }
33    }
34}