wslc 0.1.8

Safe Rust wrapper for Microsoft WSL Containers
use wslc::{ContainerOptions, ImagePullOptions, ProcessOptions, Service, Session};

mod common;

const ALPINE_IMAGE: &str = "docker.io/library/alpine:latest";

fn main() -> wslc::Result<()> {
    Service::ensure_available()?;

    let name = common::unique_name("wslc-inspect-demo");
    let session = Session::builder(&name, common::storage_path(&name))
        .cpu_count(2)
        .memory_mb(2048)
        .terminate_on_drop(true)
        .start()?;

    session
        .pull_image(ImagePullOptions::new(ALPINE_IMAGE))
        .run()?;

    let container = session
        .container(ContainerOptions::new(ALPINE_IMAGE))
        .name(&name)
        .init_process(ProcessOptions::new(["/bin/echo", "inspect-ok"]).capture_stdout())
        .auto_remove(true)
        .create()?;

    println!("container id: {}", container.id()?);
    println!("state before start: {:?}", container.state()?);
    println!("inspect bytes: {}", container.inspect()?.len());

    let output = container.start_and_wait()?;
    println!("status: {}", output.status);
    println!("stdout: {}", String::from_utf8_lossy(&output.stdout));

    session.terminate()?;
    Ok(())
}