Skip to content

Commit 26393ef

Browse files
committed
loop: add reservation cli commands
1 parent ebe6024 commit 26393ef

File tree

2 files changed

+147
-1
lines changed

2 files changed

+147
-1
lines changed

cmd/loop/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func main() {
153153
monitorCommand, quoteCommand, listAuthCommand,
154154
listSwapsCommand, swapInfoCommand, getLiquidityParamsCommand,
155155
setLiquidityRuleCommand, suggestSwapCommand, setParamsCommand,
156-
getInfoCommand,
156+
getInfoCommand, reservationsCommands,
157157
}
158158

159159
err := app.Run(os.Args)

cmd/loop/reservations.go

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package main
2+
3+
import (
4+
"context"
5+
6+
"github.com/lightninglabs/loop/looprpc"
7+
"github.com/urfave/cli"
8+
)
9+
10+
var reservationsCommands = cli.Command{
11+
12+
Name: "reservations",
13+
ShortName: "r",
14+
Usage: "manage reservations",
15+
Subcommands: []cli.Command{
16+
newReservationCommand,
17+
listReservationsCommand,
18+
getReservationTermsCommand,
19+
},
20+
}
21+
22+
var (
23+
newReservationCommand = cli.Command{
24+
Name: "new",
25+
Usage: "create a new reservation",
26+
ArgsUsage: "amt",
27+
Description: `
28+
Create a new reservation for the amount in satoshis specified by the amt argument.
29+
`,
30+
Flags: []cli.Flag{
31+
cli.StringFlag{
32+
Name: "amt",
33+
Usage: "the amount to reserve",
34+
},
35+
},
36+
Action: newReservation,
37+
}
38+
listReservationsCommand = cli.Command{
39+
Name: "list",
40+
Usage: "list all reservations",
41+
ArgsUsage: "",
42+
Description: `
43+
List all reservations.
44+
`,
45+
Action: listReservations,
46+
}
47+
getReservationTermsCommand = cli.Command{
48+
Name: "terms",
49+
Usage: "get the terms for reservations",
50+
ArgsUsage: "",
51+
Description: `
52+
Get the terms for reservations.
53+
`,
54+
Action: getReservationTerms,
55+
}
56+
)
57+
58+
func newReservation(ctx *cli.Context) error {
59+
args := ctx.Args()
60+
61+
var amtStr string
62+
switch {
63+
case ctx.IsSet("amt"):
64+
amtStr = ctx.String("amt")
65+
case ctx.NArg() > 0:
66+
amtStr = args[0]
67+
default:
68+
// Show command help if no arguments and flags were provided.
69+
return cli.ShowCommandHelp(ctx, "new")
70+
}
71+
72+
amt, err := parseAmt(amtStr)
73+
if err != nil {
74+
return err
75+
}
76+
77+
client, cleanup, err := getReservationClient(ctx)
78+
if err != nil {
79+
return err
80+
}
81+
defer cleanup()
82+
83+
resp, err := client.OpenReservation(
84+
context.Background(), &looprpc.OpenReservationRequest{
85+
Amount: uint64(amt),
86+
},
87+
)
88+
if err != nil {
89+
return err
90+
}
91+
92+
printRespJSON(resp)
93+
return nil
94+
}
95+
96+
func listReservations(ctx *cli.Context) error {
97+
client, cleanup, err := getReservationClient(ctx)
98+
if err != nil {
99+
return err
100+
}
101+
defer cleanup()
102+
103+
resp, err := client.ListReservations(
104+
context.Background(), &looprpc.ListReservationsRequest{},
105+
)
106+
if err != nil {
107+
return err
108+
}
109+
110+
printRespJSON(resp)
111+
return nil
112+
}
113+
114+
func getReservationTerms(ctx *cli.Context) error {
115+
client, cleanup, err := getReservationClient(ctx)
116+
if err != nil {
117+
return err
118+
}
119+
defer cleanup()
120+
121+
resp, err := client.GetReservationTerms(
122+
context.Background(), &looprpc.GetReservationTermsRequest{},
123+
)
124+
if err != nil {
125+
return err
126+
}
127+
128+
printRespJSON(resp)
129+
return nil
130+
}
131+
132+
func getReservationClient(ctx *cli.Context) (looprpc.ReservationClientClient, func(), error) {
133+
rpcServer := ctx.GlobalString("rpcserver")
134+
tlsCertPath, macaroonPath, err := extractPathArgs(ctx)
135+
if err != nil {
136+
return nil, nil, err
137+
}
138+
conn, err := getClientConn(rpcServer, tlsCertPath, macaroonPath)
139+
if err != nil {
140+
return nil, nil, err
141+
}
142+
cleanup := func() { conn.Close() }
143+
144+
reservationClient := looprpc.NewReservationClientClient(conn)
145+
return reservationClient, cleanup, nil
146+
}

0 commit comments

Comments
 (0)