package pandoc import ( "bytes" "context" "encoding/json" "io" "net/http" ) type Client struct { client *http.Client address string } type PandocClient interface { ConvertLatexToHtml5(ctx context.Context, text string) (string, error) } func NewPandocClient(client *http.Client, address string) *Client { return &Client{ client: client, address: address, } } type convertRequest struct { Text string `json:"text"` From string `json:"from"` To string `json:"to"` } func (client *Client) convert(ctx context.Context, text, from, to string) (string, error) { body, err := json.Marshal(convertRequest{ Text: text, From: from, To: to, }) if err != nil { return "", err } buf := bytes.NewBuffer(body) req, err := http.NewRequestWithContext(ctx, http.MethodPost, client.address, buf) if err != nil { return "", err } req.Header.Set("Content-Type", "application/json") resp, err := client.client.Do(req) if err != nil { return "", err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return "", err } body, err = io.ReadAll(resp.Body) if err != nil { return "", err } return string(body), nil } func (client *Client) ConvertLatexToHtml5(ctx context.Context, text string) (string, error) { return client.convert(ctx, text, "latex", "html5") }