Categorygithub.com/eiffel-community/eiffelevents-sdk-go
modulepackage
0.0.0-20240807115026-5ca5c194b7dc
Repository: https://github.com/eiffel-community/eiffelevents-sdk-go.git
Documentation: pkg.go.dev

# README

Eiffel Events SDK – Go

Go Reference Sandbox badge

Eiffel Events SDK – Go

This repository contains data types, constants, and functions for working with Eiffel events in the Go language, including marshaling to and from JSON. Its goal is to make it easy to create and process Eiffel events in Go.

The module declares a Go struct for every major version of each event type. These structs are generated from the JSON schemas and named as in the examples below.

Creating new events

The struct types used to represent Eiffel events are named after the event types without the "Eiffel" prefix and "Event" suffix, and with a version suffix. For non-experimental event versions (1.0.0 and up) the version suffix is the event's major version (i.e. each major version gets its own struct) while for experimental event versions (0.x.y) every single version gets its own struct (because every version is allowed to contain backwards incompatible changes).

The following example shows two methods of creating events, with and without a factory.

package main

import (
	"fmt"
	"time"

	"github.com/eiffel-community/eiffelevents-sdk-go"
)

func main() {
	// Manual initialization of all struct members.
	var event1 eiffelevents.CompositionDefinedV3
	event1.Meta.Type = "EiffelCompositionDefinedEvent"
	event1.Meta.Version = "3.2.0"
	event1.Meta.ID = "87dac043-2e1b-41c5-833a-712833f2a613"
	event1.Meta.Time = time.Now().UnixMilli()
	event1.Data.Name = "my-composition"
	fmt.Println(event1.String())

	// Equivalent example using the factory that pre-populates all
	// required meta members (picking the most recent event version in
	// the chosen major version). Note that the factory returns
	// a struct pointer.
	event2, err := eiffelevents.NewCompositionDefinedV3()
	if err != nil {
		panic(err)
	}
	event2.Data.Name = "my-composition"
	fmt.Println(event2.String())
}

The example below shows how modifier functions can be passed to factories to populate the newly created events with additional fields. In trivial cases modifiers are superfluous and the caller can just set the desired fields after obtaining the event from the factory, but apart from being a compact representation modifiers can be used with any event type. You can also use them to create custom factories that apply a preconfigured set of modifiers.

package main

import (
	"fmt"

	"github.com/eiffel-community/eiffelevents-sdk-go"
)

func main() {
	// Create an event with modifiers that select a particular
	// version of the event and makes sure meta.source.host is
	// populated with the name of the current host.
	event1, err := eiffelevents.NewCompositionDefinedV3(
		eiffelevents.WithVersion("3.1.0"),
		eiffelevents.WithAutoSourceHost(),
	)
	if err != nil {
		panic(err)
	}
	event1.Data.Name = "my-composition"
	fmt.Println(event1.String())

	// Create a custom factory with the chosen modifiers.
	newComposition := func() (*eiffelevents.CompositionDefinedV3, error) {
		return eiffelevents.NewCompositionDefinedV3(
			eiffelevents.WithVersion("3.1.0"),
			eiffelevents.WithAutoSourceHost(),
		)
	}

	// Create a new event using the custom factory.
	event2, err := newComposition()
	if err != nil {
		panic(err)
	}
	event2.Data.Name = "my-composition"
	fmt.Println(event2.String())
}

Preferring events from a particular Eiffel edition

Each Eiffel edition has a subpackage containing version-less struct type aliases and factories for creating events with the correct version for the chosen edition. This removes much of the need to litter the code with "V3" etc suffixes.

package main

import (
	"fmt"

	"github.com/eiffel-community/eiffelevents-sdk-go/editions/lyon"
)

func main() {
	event, err := eiffelevents.NewCompositionDefined()
	if err != nil {
		panic(err)
	}
	// The event struct has the type eiffelevents.CompositionDefined,
	// which is an alias for the parent package's CompositionDefinedV3.
	// The event version is set to 3.2.0. By instead importing the paris
	// subpackage the event version would've been set to 3.1.0.

	event.Data.Name = "my-composition"
	fmt.Println(event.String())
}

Unmarshaling event JSON strings into Go structs

To unmarshal a JSON string into one of the structs defined in this package use the UnmarshalAny function and use e.g. a type switch to access the event members:

package main

import (
	"fmt"
	"io"
	"os"

	"github.com/eiffel-community/eiffelevents-sdk-go"
)

func main() {
	input, err := io.ReadAll(os.Stdin)
	if err != nil {
		panic(err)
	}

	anyEvent, err := eiffelevents.UnmarshalAny(input)
	if err != nil {
		panic(err)
	}

	switch event := anyEvent.(type) {
	case *eiffelevents.CompositionDefinedV3:
		fmt.Printf("Received %s composition\n", event.Data.Name)
	default:
		fmt.Printf("This event I don't know much about: %s\n", event)
	}
}

If you have a compound JSON structure containing e.g. an array of event objects you can declare its type to be []*eiffelevents.Any. After unmarshaling the data you can use a type switch to process the events:

package main

import (
	"encoding/json"
	"fmt"
	"io"
	"os"

	"github.com/eiffel-community/eiffelevents-sdk-go"
)

func main() {
	input, err := io.ReadAll(os.Stdin)
	if err != nil {
		panic(err)
	}

	var apiResponse struct {
		Events []*eiffelevents.Any `json:"events"`
	}

	err = json.Unmarshal(input, &apiResponse)
	if err != nil {
		panic(err)
	}

	for _, anyEvent := range apiResponse.Events {
		switch event := anyEvent.Get().(type) {
		case *eiffelevents.CompositionDefinedV3:
			fmt.Printf("Received %s composition\n", event.Data.Name)
		default:
			fmt.Printf("This event I don't know much about: %s\n", event)
		}
	}
}

Validating events

Eiffel events are defined by their schemas, and publishers are expected to send events that conform to those schemas. The validator subpackage can assist with that task as well as other user-defined validation tasks. Validation is done via a validator.Set instance, where one or more implementations of validator.Validator inspect an event in the configured order. To ease the configuration burden, validator.DefaultSet returns a reasonably configured validator.Set instance that's ready to be used. See the documentation of the validator subpackage for details.

Signing events and verifying signatures

The SDK supports cryptographic signing of (typically) outbound events as well as verification of the signature of inbound events. The signing is done according to the standard method, with the signature and metadata under the meta.security field. See the documentation of the signature subpackage for details and code examples.

Code of Conduct and Contributing

To get involved, please see Code of Conduct and contribution guidelines.

Note that these files are located in the .github repository. See this page for further details regarding default community health files.

About this repository

The contents of this repository are licensed under the Apache License 2.0.

About Eiffel

This repository forms part of the Eiffel Community. Eiffel is a protocol for technology agnostic machine-to-machine communication in continuous integration and delivery pipelines, aimed at securing scalability, flexibility and traceability. Eiffel is based on the concept of decentralized real time messaging, both to drive the continuous integration and delivery system and to document it.

Visit Eiffel Community to get started and get involved.

# Packages

No description provided by the author
Package routingkey contains functions for generating AMQP routing keys (topics) based on Eiffel events.
No description provided by the author
Package validator contains types for validating Eiffel events in different ways, e.g.

# Functions

NewActivityCanceledV1 creates a new struct pointer that represents major version 1 of EiffelActivityCanceledEvent.
NewActivityCanceledV2 creates a new struct pointer that represents major version 2 of EiffelActivityCanceledEvent.
NewActivityCanceledV3 creates a new struct pointer that represents major version 3 of EiffelActivityCanceledEvent.
NewActivityFinishedV1 creates a new struct pointer that represents major version 1 of EiffelActivityFinishedEvent.
NewActivityFinishedV2 creates a new struct pointer that represents major version 2 of EiffelActivityFinishedEvent.
NewActivityFinishedV3 creates a new struct pointer that represents major version 3 of EiffelActivityFinishedEvent.
NewActivityStartedV1 creates a new struct pointer that represents major version 1 of EiffelActivityStartedEvent.
NewActivityStartedV2 creates a new struct pointer that represents major version 2 of EiffelActivityStartedEvent.
NewActivityStartedV3 creates a new struct pointer that represents major version 3 of EiffelActivityStartedEvent.
NewActivityStartedV4 creates a new struct pointer that represents major version 4 of EiffelActivityStartedEvent.
NewActivityTriggeredV1 creates a new struct pointer that represents major version 1 of EiffelActivityTriggeredEvent.
NewActivityTriggeredV2 creates a new struct pointer that represents major version 2 of EiffelActivityTriggeredEvent.
NewActivityTriggeredV3 creates a new struct pointer that represents major version 3 of EiffelActivityTriggeredEvent.
NewActivityTriggeredV4 creates a new struct pointer that represents major version 4 of EiffelActivityTriggeredEvent.
NewAnnouncementPublishedV1 creates a new struct pointer that represents major version 1 of EiffelAnnouncementPublishedEvent.
NewAnnouncementPublishedV2 creates a new struct pointer that represents major version 2 of EiffelAnnouncementPublishedEvent.
NewAnnouncementPublishedV3 creates a new struct pointer that represents major version 3 of EiffelAnnouncementPublishedEvent.
NewArtifactCreatedV1 creates a new struct pointer that represents major version 1 of EiffelArtifactCreatedEvent.
NewArtifactCreatedV2 creates a new struct pointer that represents major version 2 of EiffelArtifactCreatedEvent.
NewArtifactCreatedV3 creates a new struct pointer that represents major version 3 of EiffelArtifactCreatedEvent.
NewArtifactDeployedV0_1_0 creates a new struct pointer that represents version 0.1.0 of EiffelArtifactDeployedEvent.
NewArtifactPublishedV1 creates a new struct pointer that represents major version 1 of EiffelArtifactPublishedEvent.
NewArtifactPublishedV2 creates a new struct pointer that represents major version 2 of EiffelArtifactPublishedEvent.
NewArtifactPublishedV3 creates a new struct pointer that represents major version 3 of EiffelArtifactPublishedEvent.
NewArtifactReusedV1 creates a new struct pointer that represents major version 1 of EiffelArtifactReusedEvent.
NewArtifactReusedV2 creates a new struct pointer that represents major version 2 of EiffelArtifactReusedEvent.
NewArtifactReusedV3 creates a new struct pointer that represents major version 3 of EiffelArtifactReusedEvent.
NewCompositionDefinedV1 creates a new struct pointer that represents major version 1 of EiffelCompositionDefinedEvent.
NewCompositionDefinedV2 creates a new struct pointer that represents major version 2 of EiffelCompositionDefinedEvent.
NewCompositionDefinedV3 creates a new struct pointer that represents major version 3 of EiffelCompositionDefinedEvent.
NewConfidenceLevelModifiedV1 creates a new struct pointer that represents major version 1 of EiffelConfidenceLevelModifiedEvent.
NewConfidenceLevelModifiedV2 creates a new struct pointer that represents major version 2 of EiffelConfidenceLevelModifiedEvent.
NewConfidenceLevelModifiedV3 creates a new struct pointer that represents major version 3 of EiffelConfidenceLevelModifiedEvent.
NewEnvironmentDefinedV1 creates a new struct pointer that represents major version 1 of EiffelEnvironmentDefinedEvent.
NewEnvironmentDefinedV2 creates a new struct pointer that represents major version 2 of EiffelEnvironmentDefinedEvent.
NewEnvironmentDefinedV3 creates a new struct pointer that represents major version 3 of EiffelEnvironmentDefinedEvent.
NewFlowContextDefinedV1 creates a new struct pointer that represents major version 1 of EiffelFlowContextDefinedEvent.
NewFlowContextDefinedV2 creates a new struct pointer that represents major version 2 of EiffelFlowContextDefinedEvent.
NewFlowContextDefinedV3 creates a new struct pointer that represents major version 3 of EiffelFlowContextDefinedEvent.
NewIssueDefinedV1 creates a new struct pointer that represents major version 1 of EiffelIssueDefinedEvent.
NewIssueDefinedV2 creates a new struct pointer that represents major version 2 of EiffelIssueDefinedEvent.
NewIssueDefinedV3 creates a new struct pointer that represents major version 3 of EiffelIssueDefinedEvent.
NewIssueVerifiedV1 creates a new struct pointer that represents major version 1 of EiffelIssueVerifiedEvent.
NewIssueVerifiedV2 creates a new struct pointer that represents major version 2 of EiffelIssueVerifiedEvent.
NewIssueVerifiedV3 creates a new struct pointer that represents major version 3 of EiffelIssueVerifiedEvent.
NewIssueVerifiedV4 creates a new struct pointer that represents major version 4 of EiffelIssueVerifiedEvent.
NewSourceChangeCreatedV1 creates a new struct pointer that represents major version 1 of EiffelSourceChangeCreatedEvent.
NewSourceChangeCreatedV2 creates a new struct pointer that represents major version 2 of EiffelSourceChangeCreatedEvent.
NewSourceChangeCreatedV3 creates a new struct pointer that represents major version 3 of EiffelSourceChangeCreatedEvent.
NewSourceChangeCreatedV4 creates a new struct pointer that represents major version 4 of EiffelSourceChangeCreatedEvent.
NewSourceChangeSubmittedV1 creates a new struct pointer that represents major version 1 of EiffelSourceChangeSubmittedEvent.
NewSourceChangeSubmittedV2 creates a new struct pointer that represents major version 2 of EiffelSourceChangeSubmittedEvent.
NewSourceChangeSubmittedV3 creates a new struct pointer that represents major version 3 of EiffelSourceChangeSubmittedEvent.
NewTestCaseCanceledV1 creates a new struct pointer that represents major version 1 of EiffelTestCaseCanceledEvent.
NewTestCaseCanceledV2 creates a new struct pointer that represents major version 2 of EiffelTestCaseCanceledEvent.
NewTestCaseCanceledV3 creates a new struct pointer that represents major version 3 of EiffelTestCaseCanceledEvent.
NewTestCaseFinishedV1 creates a new struct pointer that represents major version 1 of EiffelTestCaseFinishedEvent.
NewTestCaseFinishedV2 creates a new struct pointer that represents major version 2 of EiffelTestCaseFinishedEvent.
NewTestCaseFinishedV3 creates a new struct pointer that represents major version 3 of EiffelTestCaseFinishedEvent.
NewTestCaseStartedV1 creates a new struct pointer that represents major version 1 of EiffelTestCaseStartedEvent.
NewTestCaseStartedV2 creates a new struct pointer that represents major version 2 of EiffelTestCaseStartedEvent.
NewTestCaseStartedV3 creates a new struct pointer that represents major version 3 of EiffelTestCaseStartedEvent.
NewTestCaseTriggeredV1 creates a new struct pointer that represents major version 1 of EiffelTestCaseTriggeredEvent.
NewTestCaseTriggeredV2 creates a new struct pointer that represents major version 2 of EiffelTestCaseTriggeredEvent.
NewTestCaseTriggeredV3 creates a new struct pointer that represents major version 3 of EiffelTestCaseTriggeredEvent.
NewTestExecutionRecipeCollectionCreatedV1 creates a new struct pointer that represents major version 1 of EiffelTestExecutionRecipeCollectionCreatedEvent.
NewTestExecutionRecipeCollectionCreatedV2 creates a new struct pointer that represents major version 2 of EiffelTestExecutionRecipeCollectionCreatedEvent.
NewTestExecutionRecipeCollectionCreatedV3 creates a new struct pointer that represents major version 3 of EiffelTestExecutionRecipeCollectionCreatedEvent.
NewTestExecutionRecipeCollectionCreatedV4 creates a new struct pointer that represents major version 4 of EiffelTestExecutionRecipeCollectionCreatedEvent.
NewTestSuiteFinishedV1 creates a new struct pointer that represents major version 1 of EiffelTestSuiteFinishedEvent.
NewTestSuiteFinishedV2 creates a new struct pointer that represents major version 2 of EiffelTestSuiteFinishedEvent.
NewTestSuiteFinishedV3 creates a new struct pointer that represents major version 3 of EiffelTestSuiteFinishedEvent.
NewTestSuiteStartedV1 creates a new struct pointer that represents major version 1 of EiffelTestSuiteStartedEvent.
NewTestSuiteStartedV2 creates a new struct pointer that represents major version 2 of EiffelTestSuiteStartedEvent.
NewTestSuiteStartedV3 creates a new struct pointer that represents major version 3 of EiffelTestSuiteStartedEvent.
StructName returns the non-versioned name of the Go struct used to represent a type.
UnmarshalAny unmarshals a JSON string into one of the supported Eiffel event type structs, dependent on the meta.type field in the event payload.
VersionedStructName returns the name of the Go struct used to represent a particular version of a type.
WithAutoSourceHost attempts to figure out the FQDN of the current host and stores it in the meta.source.host field.
WithAutoSourceSerializer sets the meta.source.serializer field to a purl describing the program's main package.
WithSourceDomainID sets the meta.source.domainId field of a newly created event.
WithSourceHost sets the meta.source.host field of a newly created event.
WithSourceName sets the meta.source.name field of a newly created event.
WithSourceSerializer sets the meta.source.serializer field of a newly created event.
WithSourceURI sets the meta.source.uri field of a newly created event.
WithVersion sets the meta.version field of a newly created event.

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Variables

No description provided by the author
No description provided by the author

# Structs

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Any is a struct that represents any Eiffel event value.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Interfaces

CapabilityTeller answers questions about the capabilities of anything that resembles an Eiffel event without having to manually track which version of which event type introduced this capability.
FieldSetter sets struct field by name using the usual toplevelfield.subfield notation.
LinkFinder can search through a collection of links and locate those that have a wanted type.
MetaTeller allow introspection of key metadata fields of anything that resembles an Eiffel event.

# Type aliases

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
EventLinksV1 represents a slice of EventLinkV1 values with helper methods for adding new links.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Modifier defines a kind of function that modifies an untyped Eiffel event.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author