Skip to content

gviedma-zz/fdk-go

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go Fn Development Kit (FDK)

GoDoc

fdk-go provides convenience functions for writing Go fn code

For getting started with fn, please refer to https://github.com/fnproject/fn/blob/master/README.md

Installing fdk-go

go get github.com/fnproject/fdk-go

or your favorite vendoring solution :)

Examples

For a simple getting started, see the examples and follow the README. If you already have fn set up it will take 2 minutes!

Advanced example

TODO going to move to examples too :)

package main

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

  fdk "github.com/fnproject/fdk-go"
)

func main() {
  fdk.Handle(fdk.HandlerFunc(myHandler))
}

func myHandler(ctx context.Context, in io.Reader, out io.Writer) {
  fnctx := fdk.Context(ctx)

  contentType := fntctx.Header.Get("Content-Type")
  if contentType != "application/json" {
    fdk.WriteStatus(out, 400)
    fdk.SetHeader(out, "Content-Type", "application/json")
    io.Copy(out, `{"error":"invalid content type"}`)
    return
  }

  if fnctx.Config["FN_METHOD"] != "PUT" {
    fdk.WriteStatus(out, 404)
    fdk.SetHeader(out, "Content-Type", "application/json")
    io.Copy(out, `{"error":"route not found"}`)
    return
  }

  var person struct {
    Name string `json:"name"`
  }
  json.NewDecoder(in).Decode(&person)

  // you can write your own headers & status, if you'd like to
  fdk.WriteStatus(out, 201)
  fdk.SetHeader(out, "Content-Type", "application/json")

  all := struct {
    Name   string            `json:"name"`
    Header http.Header       `json:"header"`
    Config map[string]string `json:"config"`
  }{
    Name: person.Name,
    Header: fnctx.Header,
    Config: fnctx.Config,
  }

  json.NewEncoder(out).Encode(&all)
}

About

Go language helper funcs for fn

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%