Skip to main content

Client

Struct Client 

Source
pub struct Client { /* private fields */ }
Expand description

Talks the SDK ⇆ Gateway /sandboxes REST API and hands back Sandboxes.

Implementations§

Source§

impl Client

Source

pub fn new(opts: ClientOptions) -> Result<Self, SolariError>

Source

pub async fn create(&self, opts: CreateOptions) -> Result<Sandbox, SolariError>

Create a new headless sandbox (POST /sandboxes).

Source

pub async fn create_desktop( &self, opts: CreateOptions, ) -> Result<Sandbox, SolariError>

Create a GUI desktop VM (POST /sandboxes with kind:"desktop").

Mirrors TS createDesktop() / Python create_desktop(). The returned handle carries Sandbox::stream_url for the live view, and exposes the same core namespaces as a sandbox (commands/files/code/git). Driving the GUI (mouse/keyboard/screenshot) is not part of this surface.

Requires the desktop entitlement on the org’s plan; the gateway answers 402 FeatureRequiresPlan otherwise.

Source

pub async fn connect(&self, sandbox_id: &str) -> Result<Sandbox, SolariError>

Re-attach to a running sandbox by id (GET /sandboxes/:id).

Source

pub async fn get(&self, sandbox_id: &str) -> Result<SandboxView, SolariError>

Fetch a sandbox’s current view (GET /sandboxes/:id).

Source

pub async fn kill(&self, sandbox_id: &str) -> Result<(), SolariError>

Destroy a sandbox (DELETE /sandboxes/:id). Idempotent.

Source

pub async fn pause(&self, sandbox_id: &str) -> Result<(), SolariError>

Pause a session (POST /sandboxes/:id/pause): snapshot its RAM+disk and free its host slot. The session keeps its id; bring it back with Client::resume.

Source

pub async fn resume(&self, sandbox_id: &str) -> Result<String, SolariError>

Resume a paused session (POST /sandboxes/:id/resume) and return the control URL to re-attach to.

The session comes back on a FRESH slot, so its pre-pause control URL is stale. The gateway normally returns the new one; when it does not, derive it from the gateway origin exactly as Client::connect does.

Source

pub async fn start(&self, sandbox_id: &str) -> Result<String, SolariError>

Cold-boot a STOPPED sandbox (POST /sandboxes/:id/start) from the disk the host kept, and return the fresh control URL to re-attach to.

A sandbox is stopped when its guest powered itself off. This is a cold boot, not a resume: running processes and memory are gone, files on disk are kept. It takes a concurrency slot (429 at the cap) and opens a new billing segment. Idempotent: an already-running sandbox answers 200 and its current control URL.

Any other state is refused with SolariError::Gateway { status: 409, code } where code is NotStopped (use Client::resume for a paused one) or StartInProgress. A stopped disk that cannot be started answers 409 with its code (StoppedDiskMissing, StoppedDiskUnsafe, GoldenMismatch, DiskPlatformMismatch, DiskShaMismatch, DiskExceedsSpec, DiskOwnerMismatch). 409 HostCapabilityMissing means the host pool is not armed for start (not retryable). 503 NoCapacity / StartTimeout is SolariError::NoCapacity and 502 StartHostError is a gateway error, both retryable; 500 StartFailed is not, and leaves the sandbox stopped with its disk, so a later start is safe.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more