From 345afe0c39a3dcee33fd733a00432c055eeb2b55 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 21 Feb 2024 00:16:48 +0200 Subject: also generate String methods for Go structs --- internal/generated/nqc.raku | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'internal/generated/nqc.raku') diff --git a/internal/generated/nqc.raku b/internal/generated/nqc.raku index 040617f..f358e2a 100644 --- a/internal/generated/nqc.raku +++ b/internal/generated/nqc.raku @@ -34,7 +34,23 @@ class NQCToGoActions { method constant($/) { make 'const ' ~ $ ~ ' = ' ~ $ ~ "\n" } method struct($/) { - make 'type ' ~ $.made ~ " struct \{\n\t" ~ $.map(*.made).join("\n\t") ~ "\n\}" + make 'type ' ~ $.made ~ " struct \{\n\t" + ~ $.map(*.made).join("\n\t") + ~ "\n\}\n\n" + ~ self!struct-go-string-method($/); + } + + # Generate String() method on the Go struct, for pretty printing. + method !struct-go-string-method($/) returns Str { + my Str $self-ref = $.lc.substr(0,1); + my Str @format = $.map({ $_..made ~ ':%v' }); + my Str @args = $.map({ "$self-ref." ~ $_..made }); + + return qq:to/END/; + func ({$self-ref} {$}) String() string \{ + \treturn fmt.Sprintf("{@format.join(' ')}", {@args.join(', ')}) + \} + END } method member($/) { make $.made ~ ' ' ~ ($ // '') ~ $.made } -- cgit v1.2.3