agrirouter

package module
v0.0.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

README

agrirouter Go SDK

Go SDK for agrirouter is a library that provides a shared interface to access functionality common for agrirouter applications.

🚧🚧🚧 Currently this is ONLY intended to be used internally by agrirouter outbound integrations! 🚧🚧🚧

🚧🚧🚧 External use is NOT SUPPORTED 🚧🚧🚧

Development

Following instructions are for developers working on this SDK.

Prerequisites
  • Go 1.23 or later
  • bash or compatible shell
  • Docker
  • make (optional, for convenience)
Install git hooks

Run this command:

git config core.hooksPath .githooks

This will set up git hooks to run minimal set of checks on commit and push. These would not require make.

Code Generation

Script tools/oapi/generate.sh would generate Go code from the OpenAPI specification files.

It uses oapi-codegen tool using dockerized installation, hence it only requires Docker to be installed and bash to run the script that invokes docker.

Cheatsheet

make will run everything: code generation, tidying, full linting and tests.

make test will run tests only.

make vet will run go vet on the library code.

make vet-test-server will run go vet on the test server code.

make vet-all will run go vet on both above.

make lint will run vet for all library and other linters for recently added changes (against the HEAD).

make lint-all will run vet and linters for all files.

make generate will run code generation.

make tidy will run go mod tidy.

make tidy-test-server will run go mod tidy for the test server code.

make tidy-all will run go mod tidy for both library and test server code.

Documentation

Overview

Package agrirouter provides a client for interacting with the new agrirouter API.

Index

Constants

View Source
const CapabilityDirectionReceive = internal_models.RECEIVE

CapabilityDirectionReceive indicates capability of endpoint to receive messages.

View Source
const CapabilityDirectionSend = internal_models.SEND

CapabilityDirectionSend indicates capability of endpoint to send messages.

View Source
const CapabilityDirectionSendReceive = internal_models.SENDRECEIVE

CapabilityDirectionSendReceive indicates capability of endpoint to both send and receive messages.

View Source
const CommunicationUnit = internal_models.CommunicationUnit

CommunicationUnit is an endpoint type representing a communication unit.

Communication units are typically devices that can send and receive agrirouter messages, which are installed inside of a vehicle or a machine.

View Source
const FarmingSoftware = internal_models.FarmingSoftware

FarmingSoftware is an endpoint type representing farming software applications.

Farming software applications can send and receive agrirouter messages, and they are typically cloud deployed applications that manage agricultural data and provide farmers with their own typically web-based user interface.

View Source
const VirtualCommunicationUnit = internal_models.VirtualCommunicationUnit

VirtualCommunicationUnit is an endpoint type representing a virtual communication unit.

Virtual communication units like usual communication units represent devices that can send and receive agrirouter messages, but they are doing so indirectly via their own cloud service, which is not installed inside of a vehicle or a machine.

Variables

View Source
var (
	// ErrPutEndpointFailed is returned when an error occurs while trying to put an endpoint.
	ErrPutEndpointFailed = errors.New("failed to put endpoint")

	// ErrFailedStatusCode is returned when the agrirouter API returns a status code that is not expected.
	ErrFailedStatusCode = errors.New("unexpected status code received from agrirouter API")

	// ErrAPICallFailed is returned when an API call fails due to network or server issues.
	ErrAPICallFailed = errors.New("API call failed")
)

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is the structure that allows interaction with the agrirouter API.

func NewClient

func NewClient(serverURL string, opts ...ClientOption) (*Client, error)

NewClient creates a new agrirouter client with the given server URL. The server URL should be the base URL of the agrirouter API, e.g. "https://api.qa.agrirouter.farm".

func (*Client) PutEndpoint

func (c *Client) PutEndpoint(
	ctx context.Context,
	externalID string,
	params *PutEndpointParams,
	req *PutEndpointRequest,
) (*Endpoint, error)

PutEndpoint sends a request to the agrirouter API to create or update an endpoint.

Identifier externalId must uniquely identify created or updated endpoint, if endpoint with the same externalId already exists, it will be updated, but only if client is authorized to change that endpoint, f.e application owns it.

The request body must contain all endpoint capabilities and subscriptions. It is not possible to update only part of endpoint configuration. For example if subscriptions are not provided, they will be removed (set to empty list).

func (*Client) SendMessage

func (c *Client) SendMessage(
	ctx context.Context,
	params *SendMessageParams,
	body io.Reader,
) error

SendMessage sends a message to the agrirouter API.

The body of the request must be a valid payload of agrirouter message.

type ClientOption

type ClientOption = oapi.ClientOption

ClientOption is a type for options that can be passed to the agrirouter client.

func WithHTTPClient

func WithHTTPClient(doer HTTPRequestDoer) ClientOption

WithHTTPClient allows to set a custom HTTP client for the agrirouter client.

func WithRequestEditorFn

func WithRequestEditorFn(fn RequestEditorFn) ClientOption

WithRequestEditorFn allows to set a custom request editor function to modify request before sending it.

type Endpoint

type Endpoint = internal_models.Endpoint

Endpoint is the structure representing an agrirouter endpoint.

type EndpointCapability

type EndpointCapability = internal_models.EndpointCapability

EndpointCapability is the structure representing an endpoint's capability.

It defines what endpoint can do, such as sending or receiving messages of specific types.

type EndpointSubscription

type EndpointSubscription = internal_models.EndpointSubscription

EndpointSubscription is the structure representing an endpoint's subscription.

It defines which message types the endpoint is subscribed to, meaning it can receive messages of those types in case if sending endpoint has published them.

type HTTPRequestDoer

type HTTPRequestDoer = oapi.HttpRequestDoer

HTTPRequestDoer performs HTTP requests.

The standard http.Client implements this interface.

type PutEndpointParams

type PutEndpointParams = internal_models.PutEndpointParams

PutEndpointParams contains parameters to create or update an endpoint.

type PutEndpointRequest

type PutEndpointRequest = internal_models.PutEndpointRequest

PutEndpointRequest is the request structure for creating or updating an endpoint.

type RequestEditorFn

type RequestEditorFn = oapi.RequestEditorFn

RequestEditorFn is a function that can modify the request before it is sent.

type SendMessageParams

type SendMessageParams = internal_models.SendMessagesParams

SendMessageParams contains parameters to send a message.

Directories

Path Synopsis
internal
oapi
Package oapi provides primitives to interact with the openapi HTTP API.
Package oapi provides primitives to interact with the openapi HTTP API.
oapi/models
Package models provides primitives to interact with the openapi HTTP API.
Package models provides primitives to interact with the openapi HTTP API.
tests/agriroutertestcontainer
Package agriroutertestcontainer is a testcontainers module for the agrirouter service.
Package agriroutertestcontainer is a testcontainers module for the agrirouter service.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL