| // 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 |
| |
| 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 |
| } |