use crate::google::storage::v2::ReadRange as ProtoRange;
use crate::model_ext::RequestedRange;
impl RequestedRange {
pub fn as_proto(&self, id: i64) -> ProtoRange {
match self {
Self::Offset(o) => ProtoRange {
read_id: id,
read_offset: *o as i64,
..ProtoRange::default()
},
Self::Tail(o) => ProtoRange {
read_id: id,
read_offset: -(*o as i64),
..ProtoRange::default()
},
Self::Segment { offset, limit } => ProtoRange {
read_id: id,
read_offset: *offset as i64,
read_length: *limit as i64,
},
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::model_ext::ReadRange;
use test_case::test_case;
#[test_case(ReadRange::all().0, ProtoRange::default())]
#[test_case(ReadRange::offset(100).0, ProtoRange { read_offset: 100, ..ProtoRange::default()})]
#[test_case(ReadRange::head(100).0, ProtoRange { read_offset: 0, read_length: 100, ..ProtoRange::default()})]
#[test_case(ReadRange::tail(100).0, ProtoRange { read_offset: -100, ..ProtoRange::default()})]
#[test_case(ReadRange::segment(100, 50).0, ProtoRange { read_offset: 100, read_length: 50, ..ProtoRange::default()})]
fn as_proto(input: RequestedRange, want: ProtoRange) {
let mut want = want;
want.read_id = 123456;
let got = input.as_proto(123456);
assert_eq!(got, want);
}
}