| // Copyright 2015 The LUCI Authors. |
| // |
| // 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 streamproto |
| |
| import ( |
| "encoding/json" |
| "flag" |
| |
| "go.chromium.org/luci/common/flag/flagenum" |
| "go.chromium.org/luci/logdog/api/logpb" |
| "go.chromium.org/luci/logdog/common/types" |
| ) |
| |
| // StreamType is a flag- and JSON-compatible wrapper around the StreamType |
| // protobuf field. |
| type StreamType logpb.StreamType |
| |
| // DefaultContentType returns the default ContentType for a given stream type. |
| func (t StreamType) DefaultContentType() types.ContentType { |
| switch logpb.StreamType(t) { |
| case logpb.StreamType_TEXT: |
| return types.ContentTypeText |
| |
| case logpb.StreamType_DATAGRAM: |
| return types.ContentTypeLogdogDatagram |
| |
| case logpb.StreamType_BINARY: |
| fallthrough |
| default: |
| return types.ContentTypeBinary |
| } |
| } |
| |
| var _ interface { |
| json.Marshaler |
| json.Unmarshaler |
| flag.Value |
| } = (*StreamType)(nil) |
| |
| var ( |
| // StreamTypeFlagEnum maps configuration strings to their underlying StreamTypes. |
| StreamTypeFlagEnum = flagenum.Enum{ |
| "text": StreamType(logpb.StreamType_TEXT), |
| "binary": StreamType(logpb.StreamType_BINARY), |
| "datagram": StreamType(logpb.StreamType_DATAGRAM), |
| } |
| ) |
| |
| // Set implements flag.Value. |
| func (t *StreamType) Set(v string) error { |
| return StreamTypeFlagEnum.FlagSet(t, v) |
| } |
| |
| // String implements flag.Value. |
| func (t *StreamType) String() string { |
| return StreamTypeFlagEnum.FlagString(t) |
| } |
| |
| // UnmarshalJSON implements json.Unmarshaler. |
| func (t *StreamType) UnmarshalJSON(data []byte) error { |
| return StreamTypeFlagEnum.JSONUnmarshal(t, data) |
| } |
| |
| // MarshalJSON implements json.Marshaler. |
| func (t StreamType) MarshalJSON() ([]byte, error) { |
| return StreamTypeFlagEnum.JSONMarshal(t) |
| } |