use http::HeaderValue;
use crate::util::FlatCsv;
#[derive(Clone, Debug, PartialEq)]
pub struct AcceptRanges(FlatCsv);
derive_header! {
AcceptRanges(_),
name: ACCEPT_RANGES
}
const ACCEPT_RANGES_BYTES: &str = "bytes";
const ACCEPT_RANGES_NONE: &str = "none";
impl AcceptRanges {
pub fn bytes() -> Self {
AcceptRanges(HeaderValue::from_static(ACCEPT_RANGES_BYTES).into())
}
pub fn is_bytes(&self) -> bool {
self.0.value == ACCEPT_RANGES_BYTES
}
pub fn none() -> Self {
AcceptRanges(HeaderValue::from_static(ACCEPT_RANGES_NONE).into())
}
pub fn is_none(&self) -> bool {
self.0.value == ACCEPT_RANGES_NONE
}
}
#[cfg(test)]
mod tests {
use super::super::test_decode;
use super::*;
fn accept_ranges(s: &str) -> AcceptRanges {
test_decode(&[s]).unwrap()
}
#[test]
fn bytes_constructor() {
assert_eq!(accept_ranges("bytes"), AcceptRanges::bytes());
}
#[test]
fn is_bytes_method_successful_with_bytes_ranges() {
assert!(accept_ranges("bytes").is_bytes());
}
#[test]
fn is_bytes_method_successful_with_bytes_ranges_by_constructor() {
assert!(AcceptRanges::bytes().is_bytes());
}
#[test]
fn is_bytes_method_failed_with_not_bytes_ranges() {
assert!(!accept_ranges("dummy").is_bytes());
}
#[test]
fn none_constructor() {
assert_eq!(accept_ranges("none"), AcceptRanges::none());
}
#[test]
fn is_none_method_successful_with_none_ranges() {
assert!(accept_ranges("none").is_none());
}
#[test]
fn is_none_method_successful_with_none_ranges_by_constructor() {
assert!(AcceptRanges::none().is_none());
}
#[test]
fn is_none_method_failed_with_not_none_ranges() {
assert!(!accept_ranges("dummy").is_none());
}
}