Skip to content

Instantly share code, notes, and snippets.

@theteachr
Last active June 2, 2024 10:58
Show Gist options
  • Select an option

  • Save theteachr/4b33b7c2c5ce8f394e96524a69e7fa82 to your computer and use it in GitHub Desktop.

Select an option

Save theteachr/4b33b7c2c5ce8f394e96524a69e7fa82 to your computer and use it in GitHub Desktop.

Revisions

  1. theteachr revised this gist Jun 2, 2024. No changes.
  2. theteachr created this gist May 13, 2024.
    68 changes: 68 additions & 0 deletions response.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,68 @@
    package main

    import (
    "fmt"
    "io"
    "strings"
    )

    type Header struct {
    Key string
    Val string
    }

    type ResponseBuilder struct {
    StatusCode int
    Headers []Header
    Body io.Reader
    }

    type Response ResponseBuilder

    func (r *Response) Send() {
    fmt.Printf("Sending response: %+v\n", *r)
    }

    type (
    NewResponse interface {
    Status(int) WithHeaders
    }

    WithHeaders interface {
    AddHeader(k string, v string) WithHeaders
    SetBody(io.Reader) WithHeaders
    Build() *Response
    }
    )

    func (r *ResponseBuilder) Status(code int) WithHeaders {
    r.StatusCode = code
    return r
    }

    func (r *ResponseBuilder) AddHeader(k string, v string) WithHeaders {
    r.Headers = append(r.Headers, Header{k, v})
    return r
    }

    func (r *ResponseBuilder) SetBody(body io.Reader) WithHeaders {
    r.Body = body
    return r
    }

    func (r *ResponseBuilder) Build() *Response {
    response := Response(*r)
    return &response
    }

    func main() {
    var builder NewResponse = &ResponseBuilder{}

    builder.
    Status(200).
    SetBody(strings.NewReader("asf")).
    AddHeader("Content", "json").
    AddHeader("Un", "").
    Build().
    Send()
    }