chore(readme): add json2go

This commit is contained in:
Oleksandr Smirnov 2025-12-08 18:07:00 +02:00
parent bc3ce2fdf4
commit 71e3383146
No known key found for this signature in database
5 changed files with 60 additions and 0 deletions

View file

@ -62,6 +62,7 @@ Requirements:
- [impl](https://github.com/josharian/impl)
- [gotests](https://github.com/cweill/gotests)
- [iferr](https://github.com/koron/iferr)
- [json2go](https://github.com/olexsmir/json2go)
</details>
<details>
@ -185,6 +186,24 @@ Requirements:
```
</details>
<details>
<summary>
<b>Convert json to Go types</b>
</summary>
![Convert JSON to Go types](./vhs/json2go.gif)
`:GoJson` opens a temporary buffer where you can paste or write JSON.
Saving the buffer (`:w` or `:wq`) automatically closes it and inserts the generated Go struct into the original buffer at the cursor position.
Alternatively, you can pass JSON directly as an argument:
```vim
:GoJson {"name": "Alice", "age": 30}
```
Additionally, `gopher.json2go` provides lua api, see `:h gopher.nvim-json2go` for details.
</details>
<details>
<summary>
@ -253,6 +272,15 @@ require("gopher").setup {
-- e.g: `message = 'fmt.Errorf("failed to %w", err)'`
message = nil,
},
json2go = {
-- command used to open interactive input.
-- e.g: `split`, `botright split`, `tabnew`
interactive_cmd = "vsplit",
-- name of autogenerated struct
-- e.g: "MySuperCoolName"
type_name = nil,
},
}
```

View file

@ -18,3 +18,6 @@ tasks:
impl:
cmd: vhs impl.tape
json2go:
cmd: vhs json2go.tape

BIN
vhs/json2go.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

2
vhs/json2go.go Normal file
View file

@ -0,0 +1,2 @@
package main

27
vhs/json2go.tape Normal file
View file

@ -0,0 +1,27 @@
Output json2go.gif
Require nvim
Require json2go
Set FontFamily "JetBrains Mono"
Set Height 800
Set Width 1500
Set Padding 20
Set Shell "bash"
Set Theme "tokyonight"
Set TypingSpeed 250ms
Hide Type@0ms "./nvim.sh json2go.go" Enter Show
Type@0ms "G"
Type@400ms ":GoJson" Sleep 500ms Enter
Type@70ms "{" Enter
Type@70ms `"json": true,` Enter
Type@70ms `"user": {"name": "Name", "of_age": true}` Enter
Type@70ms "}"
Escape Type@500ms ":wq" Enter
Sleep 1s
Type@25ms "G2o" Escape
Type@120ms `:GoJson {"json": true}` Enter
Sleep 5s