varnish_sys/vcl/
str_or_bytes.rs1use 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}