12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // Copyright 2019 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package proto
- // TODO: This file exists to provide the illusion to other source files that
- // they live within the real proto package by providing functions and types
- // that they would otherwise be able to call directly.
- import (
- "fmt"
- "reflect"
- "google.golang.org/protobuf/runtime/protoiface"
- "google.golang.org/protobuf/runtime/protoimpl"
- )
- type (
- Message = protoiface.MessageV1
- ExtensionDesc = protoimpl.ExtensionInfo
- )
- // RequiredNotSetError is an error type returned by either Marshal or Unmarshal.
- // Marshal reports this when a required field is not initialized.
- // Unmarshal reports this when a required field is missing from the input data.
- type RequiredNotSetError struct{ field string }
- func (e *RequiredNotSetError) Error() string {
- if e.field == "" {
- return fmt.Sprintf("proto: required field not set")
- }
- return fmt.Sprintf("proto: required field %q not set", e.field)
- }
- func (e *RequiredNotSetError) RequiredNotSet() bool {
- return true
- }
- type errorMask uint8
- const (
- _ errorMask = (1 << iota) / 2
- errInvalidUTF8
- errRequiredNotSet
- )
- type errorsList = []error
- var errorsListType = reflect.TypeOf(errorsList{})
- // nonFatalErrors returns an errorMask identifying V2 non-fatal errors.
- func nonFatalErrors(err error) errorMask {
- verr := reflect.ValueOf(err)
- if !verr.IsValid() {
- return 0
- }
- if !verr.Type().AssignableTo(errorsListType) {
- return 0
- }
- errs := verr.Convert(errorsListType).Interface().(errorsList)
- var ret errorMask
- for _, e := range errs {
- switch e.(type) {
- case interface{ RequiredNotSet() bool }:
- ret |= errRequiredNotSet
- case interface{ InvalidUTF8() bool }:
- ret |= errInvalidUTF8
- }
- }
- return ret
- }
|