///|
/// Run with moon run cmd/moonvcr-demo.
///
/// The transport deliberately fails if called. A successful run therefore
/// proves that StrictOffline serves the cassette without touching the network.
fn main {
let cassette_text = @moonvcr.Cassette::encode(@moonvcr.example_cassette())
let cassette = @moonvcr.Cassette::decode(cassette_text) catch {
_ => abort("cassette decode failed")
}
let request : @moonvcr.Request = {
method: "GET",
url: "https://api.example.test/v1/items?page=1",
headers: [{ name: "accept", value: "application/json", }],
body: @moonvcr.Body::Empty,
}
let session = @moonvcr.Session::with_defaults(
cassette,
@moonvcr.SessionMode::StrictOffline,
)
let offline_transport = (_request : @moonvcr.Request) => {
Err(@moonvcr.TransportError::Failed("network disabled"))
}
match session.send(request, offline_transport) {
Ok(response) => {
println("offline replay status=" + response.status.to_string())
match response.body {
@moonvcr.Body::Text(body) => println(body)
@moonvcr.Body::Empty => println("")
@moonvcr.Body::Base64(_) => println("")
}
}
Err(_) => abort("offline replay failed")
}
let scripted = @moonvcr.ScriptedTransport::new([
{
status: 201,
headers: [],
body: @moonvcr.Body::Text("recorded response"),
},
])
let record_session = @moonvcr.Session::with_defaults(
@moonvcr.Cassette::empty(),
@moonvcr.SessionMode::Record,
)
match record_session.send(request, request => scripted.send(request)) {
Ok(_) =>
println(
"recorded interactions=" +
record_session.cassette().interactions.length().to_string(),
)
Err(_) => abort("record failed")
}
}