Skip to content

Commit 2e9d3a6

Browse files
committed
dbeaver/pro#5701 re-use the root .env file in Go examples
1 parent 35dcdf7 commit 2e9d3a6

File tree

5 files changed

+55
-34
lines changed

5 files changed

+55
-34
lines changed

go/env/env.go

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,56 @@
11
package env
22

33
import (
4-
"encoding/json"
4+
"bufio"
5+
"fmt"
6+
"log/slog"
57
"os"
68
"runtime"
9+
"strings"
710

811
"github.com/dbeaver/cloudbeaver-graphql-examples/go/lib"
912
)
1013

1114
type Env struct {
12-
ServerInfo ServerInfo `json:"server"`
13-
Token string `json:"apiToken"`
15+
APIToken string
16+
serverURL string
17+
serviceURI string
1418
}
1519

16-
type ServerInfo struct {
17-
ServerURL string `json:"serverURL"`
18-
ServiceURI string `json:"serviceURI"`
19-
}
20-
21-
func Read() (Env, error) {
20+
func Read(path string) (Env, error) {
2221
env := Env{}
23-
bytes, err := os.ReadFile("env/env.json")
22+
file, err := os.Open(path)
2423
if err != nil {
25-
return env, err
24+
return env, lib.WrapError("error while opening the env file", err)
2625
}
27-
err = json.Unmarshal(bytes, &env)
28-
if err != nil {
29-
err = lib.WrapError("error while unmarshalling the env file", err)
26+
defer lib.CloseOrWarn(file)
27+
scanner := bufio.NewScanner(file)
28+
for scanner.Scan() {
29+
before, after, found := strings.Cut(scanner.Text(), "=")
30+
if !found {
31+
continue
32+
}
33+
before = strings.TrimSpace(before)
34+
after = strings.TrimSpace(after)
35+
switch before {
36+
case "api_token":
37+
env.APIToken = after
38+
case "server_url":
39+
env.serverURL = after
40+
case "service_uri":
41+
env.serviceURI = after
42+
default:
43+
slog.Warn(fmt.Sprintf("unknown env variable: %s", before))
44+
}
3045
}
3146
return env, err
3247
}
3348

3449
func (env *Env) GraphqlEndpoint() string {
35-
return env.ServerInfo.ServerURL + "/" + env.ServerInfo.ServiceURI + "/gql"
50+
return env.serverURL + "/" + env.serviceURI + "/gql"
3651
}
3752

3853
func (env *Env) PurgeToken() {
39-
env.Token = ""
54+
env.APIToken = ""
4055
runtime.GC()
4156
}

go/env/env.json.template

Lines changed: 0 additions & 7 deletions
This file was deleted.

go/graphql/client.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"bytes"
55
"encoding/json"
66
"io"
7-
"log/slog"
87
"net/http"
98

109
"github.com/dbeaver/cloudbeaver-graphql-examples/go/lib"
@@ -23,7 +22,7 @@ func (client Client) Execute(endpoint string, request Request) (Response, error)
2322
if err != nil {
2423
return Response{}, lib.WrapError("unable to execute POST request", err)
2524
}
26-
defer closeOrWarn(httpResponse.Body)
25+
defer lib.CloseOrWarn(httpResponse.Body)
2726
rawResponseBody, err := io.ReadAll(httpResponse.Body)
2827
if err != nil {
2928
return Response{}, lib.WrapError("unable to read GraphQL response body", err)
@@ -34,9 +33,3 @@ func (client Client) Execute(endpoint string, request Request) (Response, error)
3433
}
3534
return response, err
3635
}
37-
38-
func closeOrWarn(closer io.Closer) {
39-
if err := closer.Close(); err != nil {
40-
slog.Warn("error while closing a Closer: " + err.Error())
41-
}
42-
}

go/lib/lib.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
package lib
22

3-
import "fmt"
3+
import (
4+
"fmt"
5+
"io"
6+
"log/slog"
7+
)
48

59
func WrapError(errorMessage string, original error) error {
610
return fmt.Errorf("%s\n\tCaused by: %w", errorMessage, original)
711
}
12+
13+
func CloseOrWarn(closer io.Closer) {
14+
if err := closer.Close(); err != nil {
15+
slog.Warn("error while closing a Closer: " + err.Error())
16+
}
17+
}

go/main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ func main() {
2727

2828
func main0() error {
2929
// Instantiate a client
30-
env, err := env.Read()
30+
env, err := readEnv()
3131
if err != nil {
3232
return lib.WrapError("error while reading variables", err)
3333
}
3434
apiClient := initClient(env.GraphqlEndpoint())
3535

3636
// Auth
37-
err = apiClient.Auth(env.Token)
37+
err = apiClient.Auth(env.APIToken)
3838
env.PurgeToken()
3939
if err != nil {
4040
return err
@@ -67,6 +67,16 @@ func main0() error {
6767
return nil
6868
}
6969

70+
func readEnv() (env.Env, error) {
71+
var envFilePath string
72+
if len(os.Args) > 1 {
73+
envFilePath = os.Args[1]
74+
} else {
75+
envFilePath = "../.env"
76+
}
77+
return env.Read(envFilePath)
78+
}
79+
7080
func initClient(endpoint string) api.Client {
7181
cookieJar, err := cookiejar.New(nil)
7282
if err != nil {

0 commit comments

Comments
 (0)