Silk

silk/resolver

Profiles: aarch64-apple-darwin, aarch64-unknown-linux-gnu, aarch64-unknown-linux-gnu-no-libc, wasm32-unknown-unknown, x86_64-unknown-linux-gnu, x86_64-unknown-linux-gnu-no-libc.

Finite, provider-replaceable host resolution policy.

When to use

Build a ResolveRequest from an owned Host and call Resolver.resolve. Numeric hosts are handled locally; domain hosts dispatch to the lexically supplied Resolver provider.

Details

Results own at most 64 endpoints, preserve provider order, and deduplicate exact addresses. A deadline on a numeric host is checked against exactly one MonotonicClock sample. Domain providers either enforce their deadline with structured cancellation or reject it before work.

Gotchas

The result bound limits published endpoints only. It does not bound a provider's internal allocation, traversal, elapsed time, or host-scheduler blockage.

Import as Resolver with import silk.resolver { Resolver }.

Public declarations: 9.

FamilySelection

pub enum FamilySelection

The admitted address families for one resolution.

Any

Any = 0

Accepts both IPv4 and IPv6 results.

V4

V4 = 1

An IPv4 address.

V6

V6 = 2

An IPv6 address.

ResolverInputReason

pub enum ResolverInputReason

The failed request admission rule.

ZeroResults

ZeroResults = 0

The requested result limit is zero.

TooManyResults

TooManyResults = 1

The requested result limit exceeds 64.

NativeResolverOperation

pub enum NativeResolverOperation

The native operation that produced a wrapped host failure.

GetAddrInfo

GetAddrInfo = 0

Native getaddrinfo host resolution.

NativeResultReason

pub enum NativeResultReason

The reason a successful native result chain was rejected.

NullChain

NullChain = 0

A successful native lookup returned no result chain.

UnknownFamily

UnknownFamily = 1

A native result contains an unsupported address family.

NullAddress

NullAddress = 2

A native result has no address pointer.

ShortAddress

ShortAddress = 3

A native address is shorter than its family requires.

ResolverError

pub union ResolverError

A typed host-resolution failure.

InvalidInput

ResolverError.InvalidInput { reason: ResolverInputReason, value: usize }: ResolverError

The resolution request failed pure admission.

Field reason

pub reason: ResolverInputReason

The admission rule that rejected the request or native result.

Field value

pub value: usize

The rejected result-count limit.

UnsupportedForm

ResolverError.UnsupportedForm: ResolverError

The input uses an unsupported host form.

Timeout

ResolverError.Timeout: ResolverError

The supplied absolute deadline has been reached.

DeadlineUnsupported

ResolverError.DeadlineUnsupported: ResolverError

The selected provider cannot enforce the supplied deadline.

NoAddress

ResolverError.NoAddress: ResolverError

No admitted address remains after selection.

NameNotFound

ResolverError.NameNotFound: ResolverError

The requested host name was not found.

TemporaryFailure

ResolverError.TemporaryFailure: ResolverError

The host lookup reported a temporary failure.

FamilyUnsupported

ResolverError.FamilyUnsupported: ResolverError

The requested address family is unsupported.

SystemResources

ResolverError.SystemResources: ResolverError

The operating system cannot supply the required resources.

LimitExceeded

ResolverError.LimitExceeded { maximum: usize }: ResolverError

The distinct endpoint count exceeds the requested result limit.

Field maximum

pub maximum: usize

The maximum number of distinct endpoints allowed in the result.

InvalidNativeResult

ResolverError.InvalidNativeResult { reason: NativeResultReason, index: usize }: ResolverError

A successful native result failed validation.

Field reason

pub reason: NativeResultReason

The admission rule that rejected the request or native result.

Field index

pub index: usize

The zero-based native result-chain index.

NativeFailure

ResolverError.NativeFailure { operation: NativeResolverOperation, eai: i32, errno: silk/option.Option<i32> }: ResolverError

A native boundary failed with the retained operation and error number.

Field operation

pub operation: NativeResolverOperation

The native operation that reported this failure.

Field eai

pub eai: i32

The exact getaddrinfo error code.

Field errno

pub errno: silk/option.Option<i32>

The system error number when getaddrinfo reports a system failure.

ResolveRequest

pub struct ResolveRequest

One finite owned resolution request.

Associated function ResolveRequest.make

pub fn make(host: Host, port: Port, family: FamilySelection, maxResults: usize, deadline: silk/option.Option<silk/system_clock.Instant>) -> silk/result.Result<silk/resolver.ResolveRequest, silk/resolver.ResolverError>

Admits an owned host, checked port, finite capacity, family, and optional absolute deadline.

Method ResolveRequest.host

pub fn host<'life0>(self: &'life0 ResolveRequest) -> Host

Returns the owned host by value.

Method ResolveRequest.port

pub fn port<'life0>(self: &'life0 ResolveRequest) -> Port

Returns the checked port by value.

Method ResolveRequest.family

pub fn family<'life0>(self: &'life0 ResolveRequest) -> FamilySelection

Returns the selected address family.

Method ResolveRequest.maxResults

pub fn maxResults<'life0>(self: &'life0 ResolveRequest) -> usize

Returns the finite result capacity.

Method ResolveRequest.hasDeadline

pub fn hasDeadline<'life0>(self: &'life0 ResolveRequest) -> bool

Reports whether the request carries an absolute deadline.

Method ResolveRequest.deadline

pub fn deadline<'life0>(self: &'life0 ResolveRequest) -> silk/option.Option<silk/system_clock.Instant>

Returns the optional absolute deadline for a provider that can enforce it.

ResolvedEndpoints

pub struct ResolvedEndpoints

One finite owned sequence of resolved endpoints.

Associated function ResolvedEndpoints.make

pub fn make(maximum: usize) -> silk/result.Result<silk/resolver.ResolvedEndpoints, silk/resolver.ResolverError>

Creates an empty finite builder after validating its capacity.

Method ResolvedEndpoints.length

pub fn length<'life0>(self: &'life0 ResolvedEndpoints) -> usize

Returns the number of admitted endpoints.

Method ResolvedEndpoints.get

pub fn get<'life0>(self: &'life0 ResolvedEndpoints, index: usize) -> Endpoint

Returns a copied endpoint at a valid index.

Method ResolvedEndpoints.asSlice

pub fn asSlice<'life0>(self: &'life0 ResolvedEndpoints) -> &'life0 [silk/network_address.Endpoint]

Borrows the admitted endpoint prefix.

Method ResolvedEndpoints.admit

pub effect<'life0> fn admit<'life0>(self: &'life0 mut ResolvedEndpoints, endpoint: Endpoint) -> Admission ! ResolverError | OutOfMemoryError ? &mut Allocator

Adds one stable-distinct endpoint, or fails instead of truncating beyond the capacity.

Admission

pub enum Admission

Whether one candidate changed a result builder.

Added

Added = 0

The candidate was appended to the owned result.

Duplicate

Duplicate = 1

An equal endpoint was already present.

Resolver

pub service Resolver

A replaceable domain-only resolver provider.

Operation resolveDomain

effect<'env> fn resolveDomain<'life0: 'env, 'life1: 'env, 'env>(request: &'life0 silk/resolver.ResolveRequest, domain: &'life1 silk/network_address.DomainHost) -> ResolvedEndpoints ! ResolverError | OutOfMemoryError ? &mut Resolver | &mut Allocator

Resolves one admitted domain request and owns all returned endpoint storage.

Associated function Resolver.resolve

pub effect<'life0> fn resolve<'life0>(request: &'life0 silk/resolver.ResolveRequest) -> ResolvedEndpoints ! ResolverError | OutOfMemoryError ? &mut Resolver | &mut Allocator | &mut MonotonicClock

Resolves one owned host with finite results and exact numeric deadline preflight.

On this page