github.com/ice-blockchain/go/src@v0.0.0-20240403114104-1564d284e521/net/http/h2_error.go (about) 1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build !nethttpomithttp2 6 7 package http 8 9 import ( 10 "reflect" 11 ) 12 13 func (e http2StreamError) As(target any) bool { 14 dst := reflect.ValueOf(target).Elem() 15 dstType := dst.Type() 16 if dstType.Kind() != reflect.Struct { 17 return false 18 } 19 src := reflect.ValueOf(e) 20 srcType := src.Type() 21 numField := srcType.NumField() 22 if dstType.NumField() != numField { 23 return false 24 } 25 for i := 0; i < numField; i++ { 26 sf := srcType.Field(i) 27 df := dstType.Field(i) 28 if sf.Name != df.Name || !sf.Type.ConvertibleTo(df.Type) { 29 return false 30 } 31 } 32 for i := 0; i < numField; i++ { 33 df := dst.Field(i) 34 df.Set(src.Field(i).Convert(df.Type())) 35 } 36 return true 37 }