Skip to content

Latest commit

 

History

History
462 lines (332 loc) · 7.88 KB

File metadata and controls

462 lines (332 loc) · 7.88 KB

Minimum config

First let's set up a golang module

module github.com/gen/project

go 1.24

using the minimum configuration

// file: chainer.pkl
amends "package://nhatp.com/go/chainer-gen/pkl@0.3.0#/Config.pkl"
import "package://nhatp.com/go/chainer-gen/pkl@0.3.0#/match.pkl"

packages {
  ["github.com/gen/project"] {
    struct_name = match.with("createUserOp")
  }
}

Chain methods

source code

// file: main.go

package main

import "context"

type CreateUserInput struct{}

type createUserOp struct {
}

func (op *createUserOp) validate(ctx context.Context, input CreateUserInput) error {
	return nil
}

func (op *createUserOp) authorize(ctx context.Context, input CreateUserInput) error {
	return nil
}

func (op *createUserOp) handle(ctx context.Context, input CreateUserInput) error {
	return nil
}

expected generated code

// golden-file: gen_chainer.go
// Code generated by go-chainer-gen - dev. DO NOT EDIT.

package main

import (
	"context"
	"fmt"
)

// execute runs createUserOp.validate, createUserOp.authorize, and
// createUserOp.handle in sequence.
func (op *createUserOp) execute(ctx context.Context, input CreateUserInput) error {
	v0 := op.validate(ctx, input)
	if v0 != nil {
		return fmt.Errorf("validate: %w", v0)
	}

	v1 := op.authorize(ctx, input)
	if v1 != nil {
		return fmt.Errorf("authorize: %w", v1)
	}

	v2 := op.handle(ctx, input)
	if v2 != nil {
		return fmt.Errorf("handle: %w", v2)
	}

	return nil
}

Drop a method

source code

// file: main.go

package main

import "context"

type CreateUserInput struct{}

type createUserOp struct {
}

func (op *createUserOp) authorize(ctx context.Context, input CreateUserInput) error {
	return nil
}

func (op *createUserOp) handle(ctx context.Context, input CreateUserInput) error {
	return nil
}

expected generated code

// golden-file: gen_chainer.go
// Code generated by go-chainer-gen - dev. DO NOT EDIT.

package main

import (
	"context"
	"fmt"
)

// execute runs createUserOp.authorize, and createUserOp.handle in sequence.
func (op *createUserOp) execute(ctx context.Context, input CreateUserInput) error {
	v0 := op.authorize(ctx, input)
	if v0 != nil {
		return fmt.Errorf("authorize: %w", v0)
	}

	v1 := op.handle(ctx, input)
	if v1 != nil {
		return fmt.Errorf("handle: %w", v1)
	}

	return nil
}

Drop parameter

source code

// file: main.go

package main

import "context"

type CreateUserInput struct{}

type createUserOp struct {
}

func (op *createUserOp) validate(ctx context.Context, input CreateUserInput) error {
	return nil
}

func (op *createUserOp) authorize(ctx context.Context) error {
	return nil
}

func (op *createUserOp) handle(ctx context.Context, input CreateUserInput) error {
	return nil
}

expected generated code

// golden-file: gen_chainer.go
// Code generated by go-chainer-gen - dev. DO NOT EDIT.

package main

import (
	"context"
	"fmt"
)

// execute runs createUserOp.validate, createUserOp.authorize, and
// createUserOp.handle in sequence.
func (op *createUserOp) execute(ctx context.Context, input CreateUserInput) error {
	v0 := op.validate(ctx, input)
	if v0 != nil {
		return fmt.Errorf("validate: %w", v0)
	}

	v1 := op.authorize(ctx)
	if v1 != nil {
		return fmt.Errorf("authorize: %w", v1)
	}

	v2 := op.handle(ctx, input)
	if v2 != nil {
		return fmt.Errorf("handle: %w", v2)
	}

	return nil
}

Handoff parameter

source code

// file: main.go

package main

import "context"

type CreateUserInput struct{}

type createUserOp struct {
}

func (op *createUserOp) validate(ctx context.Context, input CreateUserInput) error {
	return nil
}

func (op *createUserOp) authorize(ctx context.Context, input CreateUserInput) (string, error) {
	return "handoff", nil
}

func (op *createUserOp) handle(ctx context.Context, input CreateUserInput, fromAuthz string) error {
	return nil
}

expected generated code

// golden-file: gen_chainer.go
// Code generated by go-chainer-gen - dev. DO NOT EDIT.

package main

import (
	"context"
	"fmt"
)

// execute runs createUserOp.validate, createUserOp.authorize, and
// createUserOp.handle in sequence.
func (op *createUserOp) execute(ctx context.Context, input CreateUserInput) error {
	v0 := op.validate(ctx, input)
	if v0 != nil {
		return fmt.Errorf("validate: %w", v0)
	}

	v1, v2 := op.authorize(ctx, input)
	if v2 != nil {
		return fmt.Errorf("authorize: %w", v2)
	}

	v3 := op.handle(ctx, input, v1)
	if v3 != nil {
		return fmt.Errorf("handle: %w", v3)
	}

	return nil
}

Handoff and drop parameter

source code

// file: main.go

package main

import "context"

type CreateUserInput struct{}

type createUserOp struct {
}

func (op *createUserOp) validate(ctx context.Context, input CreateUserInput) (int, error) {
	return 0, nil
}

func (op *createUserOp) authorize(ctx context.Context, id int) (string, error) {
	return "", nil
}

func (op *createUserOp) handle(ctx context.Context, input CreateUserInput, fromAuthz string) error {
	return nil
}

expected generated code

// golden-file: gen_chainer.go
// Code generated by go-chainer-gen - dev. DO NOT EDIT.

package main

import (
	"context"
	"fmt"
)

// execute runs createUserOp.validate, createUserOp.authorize, and
// createUserOp.handle in sequence.
func (op *createUserOp) execute(ctx context.Context, input CreateUserInput) error {
	v0, v1 := op.validate(ctx, input)
	if v1 != nil {
		return fmt.Errorf("validate: %w", v1)
	}

	v2, v3 := op.authorize(ctx, v0)
	if v3 != nil {
		return fmt.Errorf("authorize: %w", v3)
	}

	v4 := op.handle(ctx, input, v2)
	if v4 != nil {
		return fmt.Errorf("handle: %w", v4)
	}

	return nil
}

Unused parameter

source code

// file: main.go

package main

import "context"

type CreateUserInput struct{}

type createUserOp struct {
}

func (op *createUserOp) validate(ctx context.Context, input CreateUserInput) (int, error) {
	return 0, nil
}

func (op *createUserOp) authorize(ctx context.Context, id int) (string, error) {
	return "", nil
}

func (op *createUserOp) handle(ctx context.Context, input CreateUserInput) error {
	return nil
}

expected generated code

// golden-file: gen_chainer.go
// Code generated by go-chainer-gen - dev. DO NOT EDIT.

package main

import (
	"context"
	"fmt"
)

// execute runs createUserOp.validate, createUserOp.authorize, and
// createUserOp.handle in sequence.
func (op *createUserOp) execute(ctx context.Context, input CreateUserInput) error {
	v0, v1 := op.validate(ctx, input)
	if v1 != nil {
		return fmt.Errorf("validate: %w", v1)
	}

	_, v3 := op.authorize(ctx, v0)
	if v3 != nil {
		return fmt.Errorf("authorize: %w", v3)
	}

	v4 := op.handle(ctx, input)
	if v4 != nil {
		return fmt.Errorf("handle: %w", v4)
	}

	return nil
}

Return zero value

source code

// file: main.go

package main

import "context"

type CreateUserInput struct{}
type CreateUserResult struct{}

type createUserOp struct {
}

func (op *createUserOp) validate(ctx context.Context, input CreateUserInput) (int, error) {
	return 0, nil
}

func (op *createUserOp) authorize(id int) (string, error) {
	return "", nil
}

func (op *createUserOp) handle(ctx context.Context, input CreateUserInput) (CreateUserResult, error) {
	return CreateUserResult{}, nil
}

expected generated code

// golden-file: gen_chainer.go
// Code generated by go-chainer-gen - dev. DO NOT EDIT.

package main

import (
	"context"
	"fmt"
)

// execute runs createUserOp.validate, createUserOp.authorize, and
// createUserOp.handle in sequence.
func (op *createUserOp) execute(ctx context.Context, input CreateUserInput) (CreateUserResult, error) {
	v0, v1 := op.validate(ctx, input)
	if v1 != nil {
		return CreateUserResult{}, fmt.Errorf("validate: %w", v1)
	}

	_, v3 := op.authorize(v0)
	if v3 != nil {
		return CreateUserResult{}, fmt.Errorf("authorize: %w", v3)
	}

	v4, v5 := op.handle(ctx, input)
	if v5 != nil {
		return CreateUserResult{}, fmt.Errorf("handle: %w", v5)
	}

	return v4, nil
}