Skip to main content

NodeBuilder

Struct NodeBuilder 

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

Builder for constructing a Node<TailscaleProvider>.

Configures the Tailscale sidecar, RFC 017 identity, and transport parameters before wiring all layers together.

§Example

let node = Node::builder()
    .app_id("playground")?
    .device_name("alice-mbp")
    .sidecar_path("/opt/truffle/sidecar")
    .ws_port(9417)
    .build()
    .await?;

Implementations§

Source§

impl NodeBuilder

Source

pub fn app_id(self, s: impl Into<String>) -> Result<Self, NodeError>

Set the application namespace identifier (RFC 017 §5.1).

The input is validated against ^[a-z][a-z0-9-]{1,31}$. Invalid values are rejected with NodeError::BuildError.

Source

pub fn device_name(self, s: impl Into<String>) -> Self

Set the human-readable device name.

Accepts any Unicode input; soft-truncated to 256 graphemes. When unset, the builder falls back to hostname::get() at build() time.

Source

pub fn device_id(self, s: impl Into<String>) -> Result<Self, NodeError>

Override the auto-generated device ID.

Validates that s is a well-formed ULID. When provided, the value is persisted to {state_dir}/device-id.txt during build() so subsequent starts without an explicit device_id see it.

Source

pub fn sidecar_path(self, path: impl Into<PathBuf>) -> Self

Set the path to the Go sidecar binary.

Source

pub fn state_dir(self, dir: &str) -> Self

Set the Tailscale state directory.

Source

pub fn auth_key(self, key: &str) -> Self

Set the Tailscale auth key for headless authentication.

Source

pub fn ephemeral(self, val: bool) -> Self

Set whether the node is ephemeral (auto-removed from tailnet on shutdown).

Source

pub fn eager_identity(self, enabled: bool) -> Self

Set the WebSocket listen port. RFC 022 Phase C: when true (default), proactively exchange hello with online peers so durable device_id is learned without app send.

Source

pub fn ws_port(self, port: u16) -> Self

Source

pub fn idle_timeout_secs(self, secs: u64) -> Self

Set the idle timeout (in seconds) for bridged raw TCP connections.

The sidecar reaps quiet bridged connections after this long (default: 600 s). Apps holding long-lived quiet sockets should raise this or send application-level keepalives.

Source

pub async fn build(self) -> Result<Node<TailscaleProvider>, NodeError>

Build and start the node.

This creates the TailscaleProvider, starts it, creates the WebSocket transport and PeerRegistry, starts the session, and spawns the envelope router.

§Errors

Returns NodeError::BuildError if required configuration is missing, or propagates errors from the network provider startup.

Source

pub async fn build_with_auth_handler( self, on_auth: impl Fn(String) + Send + 'static, ) -> Result<Node<TailscaleProvider>, NodeError>

Build and start the node, calling on_auth if authentication is needed.

This is identical to build() except it subscribes to provider events before provider.start() blocks, forwarding AuthRequired events to the callback while waiting for authentication to complete.

§Errors

Returns NodeError::BuildError if required configuration is missing, or propagates errors from the network provider startup.

Trait Implementations§

Source§

impl Clone for NodeBuilder

Source§

fn clone(&self) -> NodeBuilder

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NodeBuilder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for NodeBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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