Skip to content

Commit

Permalink
adding a noop/noop modifier with a json API (#319)
Browse files Browse the repository at this point in the history
* Adding a noop modifier in its own noop package
  • Loading branch information
bramhaghosh committed May 19, 2021
1 parent 19163e1 commit 7e75073
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
1 change: 1 addition & 0 deletions go.mod
Expand Up @@ -8,4 +8,5 @@ require (
golang.org/x/net v0.0.0-20190628185345-da137c7871d7
google.golang.org/grpc v1.37.0
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 // indirect
google.golang.org/protobuf v1.26.0 // indirect
)
2 changes: 2 additions & 0 deletions har/har.go
Expand Up @@ -307,6 +307,7 @@ type contentJSON struct {
Encoding string `json:"encoding,omitempty"`
}

// MarshalJSON marshals the byte slice into json after encoding based on c.Encoding.
func (c Content) MarshalJSON() ([]byte, error) {
var txt string
switch c.Encoding {
Expand All @@ -327,6 +328,7 @@ func (c Content) MarshalJSON() ([]byte, error) {
return json.Marshal(cj)
}

// UnmarshalJSON unmarshals the bytes slice into Content.
func (c *Content) UnmarshalJSON(data []byte) error {
var cj contentJSON
if err := json.Unmarshal(data, &cj); err != nil {
Expand Down
78 changes: 78 additions & 0 deletions noop/noop.go
@@ -0,0 +1,78 @@
// Copyright 2021 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Package noop provides a martian.RequestResponseModifier that does not
// modify the request or response.
package noop

import (
"encoding/json"
"net/http"

"github.com/google/martian/v3"
"github.com/google/martian/v3/log"
"github.com/google/martian/v3/parse"
)

func init() {
parse.Register("noop.Modifier", modifierFromJSON)
}

type noopModifier struct {
id string
}

// Noop returns a modifier that does not change the request or the response.
func Noop(id string) martian.RequestResponseModifier {
return &noopModifier{
id: id,
}
}

// ModifyRequest logs a debug line.
func (nm *noopModifier) ModifyRequest(*http.Request) error {
log.Debugf("noopModifier: %s: no request modification applied", nm.id)
return nil
}

// ModifyResponse logs a debug line.
func (nm *noopModifier) ModifyResponse(*http.Response) error {
log.Debugf("noopModifier: %s: no response modification applied", nm.id)
return nil
}

type modifierJSON struct {
Name string `json:"name"`
Scope []parse.ModifierType `json:"scope"`
}

// modifierFromJSON takes a JSON message as a byte slice and returns
// a headerModifier and an error.
//
// Example JSON configuration message:
// {
// "scope": ["request", "result"],
// "name": "noop-name",
// }
func modifierFromJSON(b []byte) (*parse.Result, error) {
msg := &modifierJSON{}
if err := json.Unmarshal(b, msg); err != nil {
return nil, err
}

modifier := Noop(msg.Name)

return parse.NewResult(modifier, msg.Scope)
}

0 comments on commit 7e75073

Please sign in to comment.