# Functions
NewObservations initializes all measurements to empty arrays and returns the Observations skeleton.
NewSemaphore creates a new [*Semaphore] with the given count of available resources.
Start starts all the given [Stage] instances.
Wait waits until all the given channels are done.
# Structs
DedupAddrsStage is a [Stage] that deduplicates IP addresses.
DNSLookupUDPStage is a [Stage] that resolves domain names using an UDP resolver.
Done indicates that a DSL pipeline terminated.
DropStage is a [Stage] that drops reference to whatever it is passed in input.
GetaddrinfoStage is a [Stage] that resolves domain names using getaddrinfo.
HTTPRoundTripStage performs HTTP round trips with connections of type T.
MakeEndpointsStage is a [Stage] that transforms IP addresses to TCP/UDP endpoints.
Observations is the skeleton shared by most OONI measurements where we group observations by type using standard test keys.
QUICConnection is a QUIC connection.
QUICHandshakeStage is a [Stage] that creates [*QUICConnection].
Semaphore implements a semaphore.
TakeNStage is a [Stage] that allows N elements with type T to pass and drops subsequent elements.
TCPConnection is a TCP connection.
TCPConnectStage is a [Stage] that creates [*TCPConnection].
TeeAddrsStage is a [Stage] that duplicates the addresses read in Input into each of the channels belonging to [Outputs].
TLSConnection is a TLS connection.
TLSHandshakeStage is a [Stage] that creates [*TLSConnection].
# Interfaces
Closer is something that [Drop] should explicitly close.
HTTPConnection is the connection type expected by [*HTTPRoundTripStage].
Runtime is the runtime in which we execute the DSL.
Stage is a stage in the DSL graph.
Trace collects [*Observations] using tracing.