Releases: antlabs/h2o
Releases · antlabs/h2o
v0.1.7版本
v0.1.6版本
二、提取某些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版本
fix一个panic。
更新下生成http client和http server代码的文档。有时间再完善下。
v0.1.4版本
修复一个panic问题。
v0.1.3版本
dsl支持指定指针类型
v0.1.2版本
大版本更新:
自定义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版本
修复http.server的一个bug
v0.1.0版本
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版本
新加protobufmsg命令,直接可以从stdin读取json/yaml的字符串,生成protobuf message定义。
v0.0.11版本
大版本功能升级:
- 实现dsl生成http server。
- 实现dsl生成curl命令