Compare commits

...

25 Commits

Author SHA1 Message Date
766cbd8ae0 Merge pull request #66 from unistack-org/wrappers
add additional wrappers support
2022-03-10 12:30:10 +03:00
847352a8d3 Merge branch 'master' into wrappers 2022-03-10 12:28:56 +03:00
147c2d756e add additional wrappers support
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-10 12:27:37 +03:00
f42994e5c0 update go version
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-07 13:45:05 +03:00
08b3e7e23e Merge pull request #64 from unistack-org/message
add message metadata support
2022-03-05 19:04:45 +03:00
2f70890e6c Merge branch 'master' into message 2022-03-05 19:02:56 +03:00
e9be505c59 fix workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 19:02:47 +03:00
13749e7a4d Merge branch 'master' into message 2022-03-05 19:01:26 +03:00
91cf06abbd fix workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 19:01:13 +03:00
a1f29249d3 Merge branch 'master' into message 2022-03-05 18:58:02 +03:00
db9c686306 fix workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:57:54 +03:00
b74add18c1 Merge branch 'master' into message 2022-03-05 18:54:53 +03:00
5d3cbfc7d3 fix workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:54:28 +03:00
f42e8883ae Merge branch 'master' into message 2022-03-05 18:49:30 +03:00
93344a3f7b fix workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:49:01 +03:00
2e218748e8 fix workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:47:38 +03:00
178d68aae9 add message metadata support
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:46:00 +03:00
2061b2dbb6 update worklow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:45:15 +03:00
fa9e204032 update
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:38:35 +03:00
bce6f8c3e7 fix workflows
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:32:28 +03:00
1ee46a0aac update workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:25:01 +03:00
4f749c5bb1 change workflow
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-05 18:20:30 +03:00
8231f4f7f6 Merge pull request #57 from unistack-org/master
merge master
2022-03-03 17:47:50 +03:00
241114aeb1 Merge pull request #56 from unistack-org/fix_exported
fixup for older go
2022-03-03 17:47:30 +03:00
e4541d8b44 fixup for older go
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2022-03-03 17:47:12 +03:00
8 changed files with 95 additions and 33 deletions

20
.github/workflows/autoapprove.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: "autoapprove"
on:
pull_request_target:
types: [assigned, opened, synchronize, reopened]
permissions:
pull-requests: write
contents: write
jobs:
autoapprove:
runs-on: ubuntu-latest
steps:
- name: approve
uses: hmarr/auto-approve-action@v2
if: github.actor == 'vtolstov' || github.actor == 'dependabot[bot]'
id: approve
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

21
.github/workflows/automerge.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
name: "automerge"
on:
pull_request_target:
types: [assigned, opened, synchronize, reopened]
permissions:
pull-requests: write
contents: write
jobs:
automerge:
runs-on: ubuntu-latest
if: github.actor == 'vtolstov'
steps:
- name: merge
id: merge
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.TOKEN}}

View File

@@ -12,7 +12,7 @@ jobs:
- name: setup
uses: actions/setup-go@v2
with:
go-version: 1.16
go-version: 1.17
- name: checkout
uses: actions/checkout@v3
- name: cache

View File

@@ -47,7 +47,7 @@ jobs:
- name: setup
uses: actions/setup-go@v2
with:
go-version: 1.16
go-version: 1.17
# Initializes the CodeQL tools for scanning.
- name: init
uses: github/codeql-action/init@v1

View File

@@ -1,4 +1,4 @@
name: "prautomerge"
name: "dependabot-automerge"
on:
pull_request_target:
@@ -9,21 +9,17 @@ permissions:
contents: write
jobs:
dependabot:
automerge:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
if: github.actor == 'dependabot[bot]'
steps:
- name: metadata
id: metadata
uses: dependabot/fetch-metadata@v1.3.0
with:
github-token: "${{ secrets.TOKEN }}"
- name: approve
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.TOKEN}}
- name: merge
id: merge
if: ${{contains(steps.metadata.outputs.dependency-names, 'go.unistack.org')}}
run: gh pr merge --auto --merge "$PR_URL"
env:

View File

@@ -12,7 +12,7 @@ jobs:
- name: setup
uses: actions/setup-go@v2
with:
go-version: 1.16
go-version: 1.17
- name: checkout
uses: actions/checkout@v3
- name: cache

25
http.go
View File

@@ -604,6 +604,8 @@ func (h *httpClient) Publish(ctx context.Context, p client.Message, opts ...clie
}
func (h *httpClient) publish(ctx context.Context, ps []client.Message, opts ...client.PublishOption) error {
var body []byte
options := client.NewPublishOptions(opts...)
// get proxy
@@ -622,24 +624,22 @@ func (h *httpClient) publish(ctx context.Context, ps []client.Message, opts ...c
for _, p := range ps {
md := metadata.Copy(omd)
md[metadata.HeaderContentType] = p.ContentType()
md[metadata.HeaderTopic] = p.Topic()
cf, err := h.newCodec(p.ContentType())
if err != nil {
return errors.InternalServerError("go.micro.client", err.Error())
}
var body []byte
// passed in raw data
if d, ok := p.Payload().(*codec.Frame); ok {
body = d.Data
} else {
b := bytes.NewBuffer(nil)
if err := cf.Write(b, &codec.Message{Type: codec.Event}, p.Payload()); err != nil {
// use codec for payload
cf, err := h.newCodec(p.ContentType())
if err != nil {
return errors.InternalServerError("go.micro.client", err.Error())
}
body = b.Bytes()
// set the body
b, err := cf.Marshal(p.Payload())
if err != nil {
return errors.InternalServerError("go.micro.client", err.Error())
}
body = b
}
topic := p.Topic()
@@ -647,6 +647,9 @@ func (h *httpClient) publish(ctx context.Context, ps []client.Message, opts ...c
topic = exchange
}
for k, v := range p.Metadata() {
md.Set(k, v)
}
md.Set(metadata.HeaderTopic, topic)
msgs = append(msgs, &broker.Message{Header: md, Body: body})
}

44
util.go
View File

@@ -92,10 +92,15 @@ func newPathRequest(path string, method string, body string, msg interface{}, ta
continue
}
fld := tmsg.Type().Field(i)
// Skip unexported fields.
if fld.PkgPath != "" {
continue
}
/* check for empty PkgPath can be replaced with new method IsExported
if !fld.IsExported() {
continue
}
*/
t := &tag{}
for _, tn := range tags {
ts, ok := fld.Tag.Lookup(tn)
@@ -142,11 +147,11 @@ func newPathRequest(path string, method string, body string, msg interface{}, ta
switch val.Type().Kind() {
case reflect.Slice:
for idx := 0; idx < val.Len(); idx++ {
values.Add(t.name, fmt.Sprintf("%v", val.Index(idx).Interface()))
values.Add(t.name, getParam(val.Index(idx)))
}
fieldsmapskip[t.name] = struct{}{}
default:
fieldsmap[t.name] = fmt.Sprintf("%v", val.Interface())
fieldsmap[t.name] = getParam(val)
}
} else if (body == "*" || body == t.name) && method != http.MethodGet {
if tnmsg.Field(i).CanSet() {
@@ -155,10 +160,10 @@ func newPathRequest(path string, method string, body string, msg interface{}, ta
} else {
if val.Type().Kind() == reflect.Slice {
for idx := 0; idx < val.Len(); idx++ {
values.Add(t.name, fmt.Sprintf("%v", val.Index(idx).Interface()))
values.Add(t.name, getParam(val.Index(idx)))
}
} else {
values.Add(t.name, fmt.Sprintf("%v", val.Interface()))
values.Add(t.name, getParam(val))
}
}
}
@@ -211,12 +216,6 @@ func newPathRequest(path string, method string, body string, msg interface{}, ta
_, _ = b.WriteString(values.Encode())
}
/*
if err = rutil.ZeroFieldByPath(nmsg, k); err != nil {
return nil, errors.BadRequest("go.micro.client", err.Error())
}
*/
if rutil.IsZero(nmsg) {
return b.String(), nil, nil
}
@@ -319,3 +318,26 @@ type tag struct {
key string
name string
}
func getParam(val reflect.Value) string {
var v string
switch val.Kind() {
case reflect.Ptr:
switch reflect.Indirect(val).Type().String() {
case
"wrapperspb.BoolValue",
"wrapperspb.BytesValue",
"wrapperspb.DoubleValue",
"wrapperspb.FloatValue",
"wrapperspb.Int32Value", "wrapperspb.Int64Value",
"wrapperspb.StringValue",
"wrapperspb.UInt32Value", "wrapperspb.UInt64Value":
if eva := reflect.Indirect(val).FieldByName("Value"); eva.IsValid() {
v = getParam(eva)
}
}
default:
v = fmt.Sprintf("%v", val.Interface())
}
return v
}