.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / lsp / command / util.go
1 // Copyright 2021 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package command
6
7 import (
8         "encoding/json"
9         "fmt"
10 )
11
12 // ID returns the command name for use in the LSP.
13 func ID(name string) string {
14         return "gopls." + name
15 }
16
17 type Command string
18
19 func (c Command) ID() string {
20         return ID(string(c))
21 }
22
23 // MarshalArgs encodes the given arguments to json.RawMessages. This function
24 // is used to construct arguments to a protocol.Command.
25 //
26 // Example usage:
27 //
28 //   jsonArgs, err := EncodeArgs(1, "hello", true, StructuredArg{42, 12.6})
29 //
30 func MarshalArgs(args ...interface{}) ([]json.RawMessage, error) {
31         var out []json.RawMessage
32         for _, arg := range args {
33                 argJSON, err := json.Marshal(arg)
34                 if err != nil {
35                         return nil, err
36                 }
37                 out = append(out, argJSON)
38         }
39         return out, nil
40 }
41
42 // UnmarshalArgs decodes the given json.RawMessages to the variables provided
43 // by args. Each element of args should be a pointer.
44 //
45 // Example usage:
46 //
47 //   var (
48 //       num int
49 //       str string
50 //       bul bool
51 //       structured StructuredArg
52 //   )
53 //   err := UnmarshalArgs(args, &num, &str, &bul, &structured)
54 //
55 func UnmarshalArgs(jsonArgs []json.RawMessage, args ...interface{}) error {
56         if len(args) != len(jsonArgs) {
57                 return fmt.Errorf("DecodeArgs: expected %d input arguments, got %d JSON arguments", len(args), len(jsonArgs))
58         }
59         for i, arg := range args {
60                 if err := json.Unmarshal(jsonArgs[i], arg); err != nil {
61                         return err
62                 }
63         }
64         return nil
65 }