viceroy_lib/wiggle_abi/
fastly_purge_impl.rs1use {
4 super::types::{PurgeOptions, PurgeOptionsMask},
5 crate::{error::Error, session::Session, wiggle_abi::fastly_purge::FastlyPurge},
6 wiggle::{GuestMemory, GuestPtr},
7};
8
9impl FastlyPurge for Session {
10 fn purge_surrogate_key(
11 &mut self,
12 memory: &mut GuestMemory<'_>,
13 surrogate_key: GuestPtr<str>,
14 mut options_mask: PurgeOptionsMask,
15 _options: GuestPtr<PurgeOptions>,
16 ) -> Result<(), Error> {
17 let soft_purge = options_mask.contains(PurgeOptionsMask::SOFT_PURGE);
18 options_mask &= !PurgeOptionsMask::SOFT_PURGE;
19
20 if options_mask != PurgeOptionsMask::empty() {
21 return Err(Error::Unsupported {
22 msg: "unsupported purge option",
23 });
24 }
25
26 let key = memory
27 .as_str(surrogate_key)?
28 .ok_or(Error::SharedMemory)?
29 .parse()?;
30 let purged = self.cache().purge(key, soft_purge);
31 tracing::debug!("{purged} variants purged");
32 Ok(())
33 }
34}