Skip to content

Commit

Permalink
refactor(mimetype/html): 结构体标签改为 XMLName
Browse files Browse the repository at this point in the history
否则还需要为 HTML 定义一个字段,过于麻烦,且 XMLName 本身也常见。
  • Loading branch information
caixw committed Apr 25, 2024
1 parent dfe5521 commit 78bc649
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 12 deletions.
14 changes: 7 additions & 7 deletions mimetype/html/html.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@
//
// func handle(ctx *web.Context) Responser {
// obj := &struct{
// HTMLName struct{} `html:"Object"`
// XMLName struct{} `html:"Object"`
// Data string
// }{}
// return Object(200, obj, nil)
// }
//
// 预定义的模板
//
// 框架本身提供了一些类型的定义,比如 [web.Problem],当作为 html 输出时,其模板名称和数据为由
// [web.Problem.MarshalHTML] 方法返回,所以用户需要提供对应的模板定义
// 框架本身提供了一些数据类型的定义,比如 [web.Problem],
// 用户需要提供由 [web.Problem.MarshalHTML] 返回的模板定义
// 如果用户还使用了 [server.RenderResponse],那么也需要提供对应的模板定义。
package html

Expand Down Expand Up @@ -56,11 +56,11 @@ type Marshaler interface {
// 参数 v 可以是以下几种可能:
// - string 或是 []byte 将内容作为 HTML 内容直接输出;
// - 实现了 [Marshaler] 接口,则按 [Marshaler.MarshalHTML] 返回的查找模板名称;
// - 其它普通对象,将获取对象的 HTMLName 的 struct tag,若不存在则直接采用类型名作为模板名;
// - 其它普通对象,将获取对象的 XMLName 的 struct tag,若不存在则直接采用类型名作为模板名;
// - 其它情况下则是返回 [mimetype.ErrUnsupported];
func Marshal(ctx *web.Context, v any) ([]byte, error) {
if ctx == nil {
panic("不支持该操作")
panic("参数 ctx 不能为空")
}

switch obj := v.(type) {
Expand Down Expand Up @@ -121,10 +121,10 @@ func getName(v any) (string, any) {
if name := rt.Name(); name != "" {
return name, v
}
panic(fmt.Sprintf("text/html 不支持输出当前类型 %s", rt.Kind()))
panic(fmt.Sprintf("%s 不支持输出当前类型 %s", Mimetype, rt.Kind()))
}

field, found := rt.FieldByName("HTMLName")
field, found := rt.FieldByName("XMLName")
if !found {
return rt.Name(), v
}
Expand Down
4 changes: 2 additions & 2 deletions mimetype/html/html_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ func TestGetName(t *testing.T) {
a := assert.New(t, false)

type obj struct {
HTMLName struct{} `html:"t"`
XMLName struct{} `html:"t"`
}
type obj2 struct {
HTMLName struct{}
XMLName struct{}
}

type obj3 struct{}
Expand Down
2 changes: 1 addition & 1 deletion mimetype/html/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ type view struct {
// - string 直接输出字符串;
// - []byte 直接输出内容;
// - Marshaler 将 [Marshaler.MarshalHTML] 返回内容作为输出内容;
// - 其它结构体,尝试读取 HTMLName 字段的 html struct tag 值作为模板名称进行查找;
// - 其它结构体,尝试读取 XMLName 字段的 html struct tag 值作为模板名称进行查找;
//
// dir 表示是否以目录的形式组织本地化代码;
func InstallView(s web.Server, dir bool, fsys fs.FS, glob string) {
Expand Down
4 changes: 2 additions & 2 deletions mimetype/html/view_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestInstallView(t *testing.T) {
defer s.Close(500 * time.Millisecond)

type obj struct {
HTMLName struct{} `html:"t"`
XMLName struct{} `html:"t"`
}

r := s.Routers().New("def", nil)
Expand Down Expand Up @@ -80,7 +80,7 @@ func TestInstallDirView(t *testing.T) {
defer s.Close(500 * time.Millisecond)

type obj struct {
HTMLName struct{} `html:"t"`
XMLName struct{} `html:"t"`
}

r := s.Routers().New("def", nil)
Expand Down

0 comments on commit 78bc649

Please sign in to comment.