mirror of https://github.com/golang/go.git
39 lines
840 B
Go
39 lines
840 B
Go
// Copyright 2022 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.
|
|
|
|
//go:build !nethttpomithttp2
|
|
// +build !nethttpomithttp2
|
|
|
|
package http
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
func (e http2StreamError) As(target any) bool {
|
|
dst := reflect.ValueOf(target).Elem()
|
|
dstType := dst.Type()
|
|
if dstType.Kind() != reflect.Struct {
|
|
return false
|
|
}
|
|
src := reflect.ValueOf(e)
|
|
srcType := src.Type()
|
|
numField := srcType.NumField()
|
|
if dstType.NumField() != numField {
|
|
return false
|
|
}
|
|
for i := 0; i < numField; i++ {
|
|
sf := srcType.Field(i)
|
|
df := dstType.Field(i)
|
|
if sf.Name != df.Name || !sf.Type.ConvertibleTo(df.Type) {
|
|
return false
|
|
}
|
|
}
|
|
for i := 0; i < numField; i++ {
|
|
df := dst.Field(i)
|
|
df.Set(src.Field(i).Convert(df.Type()))
|
|
}
|
|
return true
|
|
}
|