Skip to content

emersion/go-varlink

Repository files navigation

Image for: Repository files navigation

go-varlink

A Go library for Varlink.

Code generation

Image for: Code generation

Given a Varlink definition file:

interface org.example.ftl

method Jump(latitude: float, longitude: float) -> ()

Client and server code can be generated:

go run github.com/emersion/go-varlink/cmd/varlinkgen -i org.example.ftl.varlink

This can be performed with go generate:

//go:build generate

package ftl

import (
	_ "github.com/emersion/go-varlink/cmd/varlinkgen"
)

//go:generate go run github.com/emersion/go-varlink/cmd/varlinkgen -i org.example.ftl.varlink

The generated file contains a Client, with one Go method per Varlink service method:

client := Client{varlink.NewClient(conn)}
_, err := client.Jump(&JumpIn{37.56, 126.99})

It also contains a Handler implementing the Varlink service, and a Backend interface which needs to be implemented:

type backend struct{}

func (backend) Jump(in *JumpIn) (*JumpOut, error) {
    log.Print(in.Latitude, in.Longitude)
    return nil, nil
}

func main() {
    server := varlink.NewServer()
    server.Handler = Handler{backend{}}
    if err := server.Serve(listener); err != nil {
        log.Fatal(err)
    }
}

License

Image for: License

MIT

About

Image for: About

A Go library for Varlink

Resources

License

Stars

Watchers

Forks

Releases

Image for: Releases
No releases published

Packages

Image for: Packages 0
No packages published

Contributors 2

Image for: Contributors 2
  •  
  •  

Languages

Image for: Languages