From 5a1ceb617c9fe08afa008f11ca47bb62946cfa55 Mon Sep 17 00:00:00 2001 From: Spencer Brower <6729162+sbrow@users.noreply.github.com> Date: Wed, 15 Jul 2026 12:30:28 -0400 Subject: [PATCH] refactor: `generate_rss` and `generate_sitemap` now use string builders. --- feed.odin | 74 +++++++++++++++++++++++-------------------------------- 1 file changed, 31 insertions(+), 43 deletions(-) diff --git a/feed.odin b/feed.odin index f3a2e10..b76cc3d 100644 --- a/feed.odin +++ b/feed.odin @@ -5,13 +5,10 @@ import "core:strings" import "core:time" generate_rss :: proc(pages: []Page, config: Site) -> string { - parts: [dynamic]string - defer delete(parts) + sb := strings.builder_make() - append( - &parts, - fmt.aprintf( - ` + strings.write_string(&sb, fmt.aprintf( + ` %s @@ -19,12 +16,11 @@ generate_rss :: proc(pages: []Page, config: Site) -> string { %s en-us `, - xml_escape(config.title), - config.base_url, - xml_escape(config.description), - config.base_url, - ), - ) + xml_escape(config.title), + config.base_url, + xml_escape(config.description), + config.base_url, + )) for page in pages { if page.type == .Home { @@ -36,10 +32,8 @@ generate_rss :: proc(pages: []Page, config: Site) -> string { pub_date = format_rfc822(page.date) } - append( - &parts, - fmt.aprintf( - ` + strings.write_string(&sb, fmt.aprintf( + ` %s %s%s %s @@ -47,42 +41,35 @@ generate_rss :: proc(pages: []Page, config: Site) -> string { %s `, - xml_escape(page.title), - config.base_url, - page.permalink, - pub_date, - config.base_url, - page.permalink, - xml_escape(page.body_html), - ), - ) + xml_escape(page.title), + config.base_url, + page.permalink, + pub_date, + config.base_url, + page.permalink, + xml_escape(page.body_html), + )) } - append(&parts, "\n") - - return strings.join(parts[:], "") + strings.write_string(&sb, "\n") + return strings.to_string(sb) } generate_sitemap :: proc(pages: []Page, base_url: string) -> string { - parts: [dynamic]string - defer delete(parts) + sb := strings.builder_make() - append( - &parts, - ` + strings.write_string(&sb, ` -`, - ) +`) for page in pages { lastmod := "" if page.date != "" { lastmod = fmt.aprintf("%s", page.date) } - append( - &parts, - fmt.aprintf("%s%s%s\n", base_url, page.permalink, lastmod), - ) + strings.write_string(&sb, fmt.aprintf( + "%s%s%s\n", base_url, page.permalink, lastmod, + )) } // Posts list page @@ -96,11 +83,12 @@ generate_sitemap :: proc(pages: []Page, base_url: string) -> string { if posts_lastmod != "" { posts_lm = fmt.aprintf("%s", posts_lastmod) } - append(&parts, fmt.aprintf("%s/posts/%s\n", base_url, posts_lm)) + strings.write_string(&sb, fmt.aprintf( + "%s/posts/%s\n", base_url, posts_lm, + )) - append(&parts, "") - - return strings.join(parts[:], "") + strings.write_string(&sb, "") + return strings.to_string(sb) } // TODO: Leaks