apiv1

package
v1.5.0 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2022 License: Apache-2.0 Imports: 4 Imported by: 1

Documentation

Overview

Package apiv1 implements the bridge between a extension and go-plugin providing most of the implementation for the extension if it's written in Go.

Package apiv1 implements the extension API for stencil

Index

Constants

View Source
const (
	// Version that this extension API implements
	Version = 1

	// Name is the plugin name that is served by go-plugin
	Name = "extension"

	// CookieKey is a basic UX feature for ensuring that
	// we execute a valid stencil plugin. This is exported
	// for ease of consumption by extensions.
	CookieKey = "STENCIL_PLUGIN"

	// CookieValue is the expected value for our CookieKey to
	// return.
	CookieValue = "はじめまして"
)

This block contains the constants for the go-plugin implementation.

Variables

This section is empty.

Functions

func NewExtensionImplementation

func NewExtensionImplementation(impl Implementation) error

NewExtensionImplementation implements a new extension and starts serving it.

func NewHandshake

func NewHandshake() plugin.HandshakeConfig

NewHandshake returns a plugin.HandshakeConfig for this extension api version.

Types

type Config

type Config struct {
	// Name is the name of this extension, used for template
	// function naming
	Name string
}

Config is configuration returned by an extension to the extension host.

type ExtensionPlugin

type ExtensionPlugin struct {
	// Impl is the real implementation for this extension
	Impl Implementation
}

ExtensionPlugin is the high level plugin used by go-plugin it stores both the server and client implementation

func (*ExtensionPlugin) Client

func (*ExtensionPlugin) Client(b *plugin.MuxBroker, c *rpc.Client) (interface{}, error)

Client is a extension client

func (*ExtensionPlugin) Server

func (p *ExtensionPlugin) Server(*plugin.MuxBroker) (interface{}, error)

Server is a extension server

type ExtensionPluginClient

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

ExtensionPluginClient implements a client that communicates over RPC

func (*ExtensionPluginClient) ExecuteTemplateFunction

func (g *ExtensionPluginClient) ExecuteTemplateFunction(t *TemplateFunctionExec) (interface{}, error)

ExecuteTemplateFunction exectues a template function for this extension

func (*ExtensionPluginClient) GetConfig

func (g *ExtensionPluginClient) GetConfig() (*Config, error)

GetConfig returns the config for the extension

func (*ExtensionPluginClient) GetTemplateFunctions

func (g *ExtensionPluginClient) GetTemplateFunctions() ([]*TemplateFunction, error)

GetTemplateFunctions returns the template functions for this extension

type ExtensionPluginServer

type ExtensionPluginServer struct {
	Impl Implementation
}

ExtensionPluginServer implements a rpc compliant server

func (*ExtensionPluginServer) ExecuteTemplateFunction

func (s *ExtensionPluginServer) ExecuteTemplateFunction(t *TemplateFunctionExec, resp *interface{}) error

ExecuteTemplateFunction executes a template function for this extension

func (*ExtensionPluginServer) GetConfig

func (s *ExtensionPluginServer) GetConfig(args interface{}, resp **Config) error

GetConfig returns the config for this extension

func (*ExtensionPluginServer) GetTemplateFunctions

func (s *ExtensionPluginServer) GetTemplateFunctions(args interface{}, resp *[]*TemplateFunction) error

GetTemplateFunctions returns the template functions for this extension

type Implementation

type Implementation interface {
	// GetConfig returns the configuration of this extension.
	GetConfig() (*Config, error)

	// GetTemplateFunctions returns all go-template functions this ext
	// implements, when a function is called, it's transparently passed over to
	// the actual extension and called there instead, it's output being
	// returned.
	GetTemplateFunctions() ([]*TemplateFunction, error)

	// ExecuteTemplateFunction executes a provided template function
	// and returns it's response.
	ExecuteTemplateFunction(t *TemplateFunctionExec) (interface{}, error)
}

Implementation is the extension api that is implemented by all extensions.

type TemplateFunction

type TemplateFunction struct {
	// Name of the template function, will be registered as:
	//  extensions.<extensionLowerName>.<name>
	Name string

	// ArgumentTypes are the argument types that this function
	// expects. They should be serializable via gob.
	ArgumentTypes []interface{}

	// ReturnType is the return type for this function, note that
	// the signature is always (type, error) and that error is already
	// included in the function signature.
	ReturnType interface{}
}

TemplateFunction is a request to create a new template function.

type TemplateFunctionExec

type TemplateFunctionExec struct {
	// Name is the name of this go-template function. It will be prefixed with the
	// following format: extensions.<name>.<templateName>
	Name string

	// Arguments are the arbitrary arguments that were passed to this function
	Arguments []interface{}
}

TemplateFunctionExec executes a template function

Jump to

Keyboard shortcuts

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