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 FamilySelectionThe admitted address families for one resolution.
Any
Any = 0Accepts both IPv4 and IPv6 results.
V4
V4 = 1An IPv4 address.
V6
V6 = 2An IPv6 address.
ResolverInputReason
pub enum ResolverInputReasonThe failed request admission rule.
ZeroResults
ZeroResults = 0The requested result limit is zero.
TooManyResults
TooManyResults = 1The requested result limit exceeds 64.
NativeResolverOperation
pub enum NativeResolverOperationThe native operation that produced a wrapped host failure.
GetAddrInfo
GetAddrInfo = 0Native getaddrinfo host resolution.
NativeResultReason
pub enum NativeResultReasonThe reason a successful native result chain was rejected.
NullChain
NullChain = 0A successful native lookup returned no result chain.
UnknownFamily
UnknownFamily = 1A native result contains an unsupported address family.
NullAddress
NullAddress = 2A native result has no address pointer.
ShortAddress
ShortAddress = 3A native address is shorter than its family requires.
ResolverError
pub union ResolverErrorA typed host-resolution failure.
InvalidInput
ResolverError.InvalidInput { reason: ResolverInputReason, value: usize }: ResolverErrorThe resolution request failed pure admission.
Field reason
pub reason: ResolverInputReasonThe admission rule that rejected the request or native result.
Field value
pub value: usizeThe rejected result-count limit.
UnsupportedForm
ResolverError.UnsupportedForm: ResolverErrorThe input uses an unsupported host form.
Timeout
ResolverError.Timeout: ResolverErrorThe supplied absolute deadline has been reached.
DeadlineUnsupported
ResolverError.DeadlineUnsupported: ResolverErrorThe selected provider cannot enforce the supplied deadline.
NoAddress
ResolverError.NoAddress: ResolverErrorNo admitted address remains after selection.
NameNotFound
ResolverError.NameNotFound: ResolverErrorThe requested host name was not found.
TemporaryFailure
ResolverError.TemporaryFailure: ResolverErrorThe host lookup reported a temporary failure.
FamilyUnsupported
ResolverError.FamilyUnsupported: ResolverErrorThe requested address family is unsupported.
SystemResources
ResolverError.SystemResources: ResolverErrorThe operating system cannot supply the required resources.
LimitExceeded
ResolverError.LimitExceeded { maximum: usize }: ResolverErrorThe distinct endpoint count exceeds the requested result limit.
Field maximum
pub maximum: usizeThe maximum number of distinct endpoints allowed in the result.
InvalidNativeResult
ResolverError.InvalidNativeResult { reason: NativeResultReason, index: usize }: ResolverErrorA successful native result failed validation.
Field reason
pub reason: NativeResultReasonThe admission rule that rejected the request or native result.
Field index
pub index: usizeThe zero-based native result-chain index.
NativeFailure
ResolverError.NativeFailure { operation: NativeResolverOperation, eai: i32, errno: silk/option.Option<i32> }: ResolverErrorA native boundary failed with the retained operation and error number.
Field operation
pub operation: NativeResolverOperationThe native operation that reported this failure.
Field eai
pub eai: i32The 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 ResolveRequestOne 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) -> HostReturns the owned host by value.
Method ResolveRequest.port
pub fn port<'life0>(self: &'life0 ResolveRequest) -> PortReturns the checked port by value.
Method ResolveRequest.family
pub fn family<'life0>(self: &'life0 ResolveRequest) -> FamilySelectionReturns the selected address family.
Method ResolveRequest.maxResults
pub fn maxResults<'life0>(self: &'life0 ResolveRequest) -> usizeReturns the finite result capacity.
Method ResolveRequest.hasDeadline
pub fn hasDeadline<'life0>(self: &'life0 ResolveRequest) -> boolReports 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 ResolvedEndpointsOne 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) -> usizeReturns the number of admitted endpoints.
Method ResolvedEndpoints.get
pub fn get<'life0>(self: &'life0 ResolvedEndpoints, index: usize) -> EndpointReturns 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 AllocatorAdds one stable-distinct endpoint, or fails instead of truncating beyond the capacity.
Admission
pub enum AdmissionWhether one candidate changed a result builder.
Added
Added = 0The candidate was appended to the owned result.
Duplicate
Duplicate = 1An equal endpoint was already present.
Resolver
pub service ResolverA 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 AllocatorResolves 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 MonotonicClockResolves one owned host with finite results and exact numeric deadline preflight.