Skip to content

Releases: antlabs/h2o

v0.1.7版本

20 Dec 09:12
Compare
Choose a tag to compare

v0.1.6版本

20 Dec 09:03
Compare
Choose a tag to compare

二、提取某些code到指定的map里面

主要是过滤一些code,比如对错误进行分级的使用场景, 有些错误非服务端引起。需要忽略这些错误,根据注释自动生成一个map,方便过滤。

用法是 @TakeCodeToMap(InfoMap), 圆括号里面是你给map的命名

2.1 命令

h2o codemsg --code-msg --linecomment --type ErrNo --take-code-to-map ./testdata/err.go

2.2 code msg定义例子, 提取感兴趣的code到map里面

// 这段代码是我们要写的。
package demo

type ErrNo int32 // 这里的类型可以自定义,--type后面类型

const (
	ENo ErrNo = 1003 // @TakeCodeToMap(InfoMap) 号码出错

	ENotFound ErrNo = 1004 //@TakeCodeToMap(InfoMap) 找不到
)

生成的代码

package demo

var InfoMap = map[int]bool{1003: true, 1004: true}
 

v0.1.5版本

31 May 08:58
Compare
Choose a tag to compare

fix一个panic。
更新下生成http client和http server代码的文档。有时间再完善下。

v0.1.4版本

19 Apr 15:05
Compare
Choose a tag to compare

修复一个panic问题。

v0.1.3版本

13 Mar 15:46
Compare
Choose a tag to compare

dsl支持指定指针类型

v0.1.2版本

08 Mar 14:52
Compare
Choose a tag to compare

大版本更新:
自定义dsl支持curl命令解析,生成http client & http server。
先睹为快的配置,详细文本估计会在1-2周后完全放出.

---
package: "completion"
protobuf:
  package: "completion.v1"
  go_package: "./pb/v1/completion"
init:
  handler: New #函数名, 名字是New认识是构造函数
  #req:
    #field:   #TODO
  rvStruct:
    name: Completion #返回的结构体名
    field:
      #Host: 

multi:
- handler: Completion.CreateCompletion
  req:
    curl: >-
      curl https://api.openai.com/v1/completions 
      -H 'Content-Type: application/json'
      -H 'Authorization: Bearer YOUR_API_KEY'
      -d '{
      "model": "text-davinci-003",
      "prompt": "Say this is a test",
      "max_tokens": 7,
      "temperature": 0
      }'

  resp:
    newType:
    body: >-
      {
      "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",
      "object": "text_completion",
      "created": 1589478378,
      "model": "text-davinci-003",
      "choices": [
        {
          "text": "\n\nThis is indeed a test",
          "index": 0,
          "logprobs": null,
          "finish_reason": "length"
        }
      ],
      "usage": {
        "prompt_tokens": 5,
        "completion_tokens": 7,
        "total_tokens": 12
      }
      }

v0.1.1版本

02 Mar 07:04
Compare
Choose a tag to compare

修复http.server的一个bug

v0.1.0版本

28 Feb 04:21
Compare
Choose a tag to compare

codemsg模块直接生成grpc的错误

使用grpc的错误可以直接在rpc调用客户端拿到结构体,grpc内部已经做了错误类型的序列化和反序列化。

服务端测试代码

package main

import (
	"context"
	"log"
	"net"

	"main/err"
	"main/helloworld"

	"google.golang.org/grpc"
)

type SearchService struct {
	helloworld.UnimplementedHelloServer
}

//SayHello(context.Context, *HelloRequest) (*HelloResponse, error)

func (s *SearchService) SayHello(ctx context.Context, r *helloworld.HelloRequest) (*helloworld.HelloResponse, error) {
	return &helloworld.HelloResponse{Message: "hello"}, err.ErrGRPCENo
	//return &helloworld.HelloResponse{Message: "hello"}, status.Error(300, "message")
}

const (
	PORT = "9005"
)

func main() {

	server := grpc.NewServer()
	helloworld.RegisterHelloServer(server,
		&SearchService{},
	)

	lis, err := net.Listen("tcp", ":"+PORT)
	if err != nil {
		log.Fatalf("net.Listen err: %v", err)
	}

	server.Serve(lis)
}

客户端测试代码

package main

import (
	"context"
	"fmt"
	"main/helloworld"

	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"google.golang.org/grpc/status"
)

func main() {

	var opts []grpc.DialOption
	opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
	conn, err := grpc.Dial("127.0.0.1:9005", opts...)
	if err != nil {
		panic(err.Error())
	}

	client := helloworld.NewHelloClient(conn)

	_, err = client.SayHello(context.TODO(), &helloworld.HelloRequest{Name: "hello"})
	fmt.Println(err)
	fmt.Printf("%#v\n", err)
	fmt.Printf("%v\n", status.Code(err))
	fmt.Printf("%v\n", status.Convert(err))
	defer conn.Close()
}

这是原始错误定义的地方

package err

type ErrNo int32

const (
	ENo ErrNo = 1003 // 号码出错

	ENotFound ErrNo = 1004 // 找不到
)

这是生成的错误码

// Code generated by "h2o codemsg --code-msg --linecomment --type ErrNo ./err/err.go --grpc --string-method string2 --string"; DO NOT EDIT."

package err

import (
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
)

var (
	ErrGRPCENo error = status.Error(codes.Code(ENo), ENo.string2()) //号码出错

	ErrGRPCENotFound error = status.Error(codes.Code(ENotFound), ENotFound.string2()) //找不到

)

v0.0.12版本

25 Feb 15:44
Compare
Choose a tag to compare

新加protobufmsg命令,直接可以从stdin读取json/yaml的字符串,生成protobuf message定义。

v0.0.11版本

24 Feb 13:03
Compare
Choose a tag to compare

大版本功能升级:

  1. 实现dsl生成http server。
  2. 实现dsl生成curl命令