viceroy-lib 0.17.0

Viceroy implementation details.
Documentation
use {
    crate::component::bindings::fastly::compute::{geo, types},
    crate::{error, linking::ComponentCtx},
    std::net::IpAddr,
};

impl geo::Host for ComponentCtx {
    fn lookup(&mut self, addr: types::IpAddress, max_len: u64) -> Result<String, types::Error> {
        let ip_addr: IpAddr = addr.into();

        let json = self
            .session()
            .geolocation_lookup(&ip_addr)
            .ok_or(geo::Error::GenericError)?;

        if json.len() > usize::try_from(max_len).unwrap() {
            return Err(error::Error::BufferLengthError {
                buf: "geo_out",
                len: "geo_max_len",
            }
            .into());
        }

        Ok(json)
    }
}