reduce allocs by re-using string builder
This commit is contained in:
parent
93bb1d64ba
commit
2325df1593
4 changed files with 61 additions and 57 deletions
|
|
@ -1,43 +1,23 @@
|
|||
package h
|
||||
|
||||
type AttributeR struct {
|
||||
Name string
|
||||
Value string
|
||||
}
|
||||
import "fmt"
|
||||
|
||||
func NewAttribute(name string, value string) *AttributeR {
|
||||
return &AttributeR{
|
||||
Name: name,
|
||||
Value: value,
|
||||
}
|
||||
}
|
||||
type AttributeMap map[string]any
|
||||
|
||||
type TextContent struct {
|
||||
Content string
|
||||
func (m *AttributeMap) ToMap() map[string]string {
|
||||
result := make(map[string]string)
|
||||
for k, v := range *m {
|
||||
switch v.(type) {
|
||||
case AttributeMap:
|
||||
m2 := v.(*AttributeMap).ToMap()
|
||||
for _, a := range m2 {
|
||||
result[k] = a
|
||||
}
|
||||
|
||||
func NewTextContent(content string) *TextContent {
|
||||
return &TextContent{
|
||||
Content: content,
|
||||
case string:
|
||||
result[k] = v.(string)
|
||||
default:
|
||||
result[k] = fmt.Sprintf("%v", v)
|
||||
}
|
||||
}
|
||||
|
||||
type RawContent struct {
|
||||
Content string
|
||||
}
|
||||
|
||||
func NewRawContent(content string) *RawContent {
|
||||
return &RawContent{
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
type ChildList struct {
|
||||
Children []Ren
|
||||
}
|
||||
|
||||
func NewChildList(children ...Ren) *ChildList {
|
||||
return &ChildList{
|
||||
Children: children,
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
|
|||
43
framework/h/renderables.go
Normal file
43
framework/h/renderables.go
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
package h
|
||||
|
||||
type AttributeR struct {
|
||||
Name string
|
||||
Value string
|
||||
}
|
||||
|
||||
type TextContent struct {
|
||||
Content string
|
||||
}
|
||||
|
||||
type RawContent struct {
|
||||
Content string
|
||||
}
|
||||
|
||||
type ChildList struct {
|
||||
Children []Ren
|
||||
}
|
||||
|
||||
func NewAttribute(name string, value string) *AttributeR {
|
||||
return &AttributeR{
|
||||
Name: name,
|
||||
Value: value,
|
||||
}
|
||||
}
|
||||
|
||||
func NewRawContent(content string) *RawContent {
|
||||
return &RawContent{
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
func NewTextContent(content string) *TextContent {
|
||||
return &TextContent{
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
func NewChildList(children ...Ren) *ChildList {
|
||||
return &ChildList{
|
||||
Children: children,
|
||||
}
|
||||
}
|
||||
|
|
@ -104,21 +104,3 @@ func (l *LifeCycle) Render(builder *strings.Builder) {
|
|||
|
||||
Children(children...).Render(builder)
|
||||
}
|
||||
|
||||
func (m *AttributeMap) ToMap() map[string]string {
|
||||
result := make(map[string]string)
|
||||
for k, v := range *m {
|
||||
switch v.(type) {
|
||||
case AttributeMap:
|
||||
m2 := v.(*AttributeMap).ToMap()
|
||||
for _, a := range m2 {
|
||||
result[k] = a
|
||||
}
|
||||
case string:
|
||||
result[k] = v.(string)
|
||||
default:
|
||||
result[k] = fmt.Sprintf("%v", v)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@ func Id(value string) Ren {
|
|||
return Attribute("id", value)
|
||||
}
|
||||
|
||||
type AttributeMap map[string]any
|
||||
type ClassMap map[string]bool
|
||||
|
||||
func Attributes(attrs *AttributeMap) *AttributeMap {
|
||||
|
|
|
|||
Loading…
Reference in a new issue