Showing preview only (8,616K chars total). Download the full file or copy to clipboard to get everything.
Repository: hanagantig/goro
Branch: main
Commit: c82cd1380cc0
Files: 612
Total size: 8.1 MB
Directory structure:
gitextract_k_fsvlv8/
├── .github/
│ └── workflows/
│ └── go.yaml
├── .gitignore
├── LICENSE
├── README.md
├── cmd/
│ ├── init.go
│ ├── root.go
│ └── update.go
├── example/
│ └── testapp/
│ ├── cmd/
│ │ └── http.go
│ ├── config/
│ │ └── app.conf.yaml
│ ├── go.mod
│ ├── go.sum
│ ├── goro.yaml
│ ├── internal/
│ │ ├── adapter/
│ │ │ ├── httprepo/
│ │ │ │ └── ordersrepo/
│ │ │ │ ├── get_by_id.go
│ │ │ │ └── repository.go
│ │ │ ├── mysqlrepo/
│ │ │ │ ├── myrepo/
│ │ │ │ │ ├── get_all.go
│ │ │ │ │ ├── get_one.go
│ │ │ │ │ ├── repository.go
│ │ │ │ │ └── save.go
│ │ │ │ └── transactor.go
│ │ │ ├── mysqlxrepo/
│ │ │ │ ├── clientrepo/
│ │ │ │ │ ├── get_by_id.go
│ │ │ │ │ ├── git_by_date.go
│ │ │ │ │ └── repository.go
│ │ │ │ └── transactor.go
│ │ │ └── pgsqlxrepo/
│ │ │ ├── transactor.go
│ │ │ └── userrepo/
│ │ │ ├── get_by_id.go
│ │ │ └── repository.go
│ │ ├── app/
│ │ │ ├── app.go
│ │ │ ├── container.go
│ │ │ ├── database.go
│ │ │ ├── http.go
│ │ │ └── logger.go
│ │ ├── config/
│ │ │ └── config.go
│ │ ├── handler/
│ │ │ └── http/
│ │ │ ├── api/
│ │ │ │ └── v1/
│ │ │ │ ├── handler.go
│ │ │ │ ├── pong.go
│ │ │ │ └── router.go
│ │ │ ├── http.go
│ │ │ └── router.go
│ │ ├── service/
│ │ │ ├── myservice/
│ │ │ │ ├── get_by_filter.go
│ │ │ │ ├── get_list.go
│ │ │ │ └── service.go
│ │ │ ├── orderservice/
│ │ │ │ ├── get_by_id.go
│ │ │ │ └── service.go
│ │ │ ├── pingpong/
│ │ │ │ ├── pong.go
│ │ │ │ └── service.go
│ │ │ └── transactor.go
│ │ └── usecase/
│ │ ├── get_clients.go
│ │ ├── pong.go
│ │ ├── sign_in.go
│ │ ├── sign_up.go
│ │ └── usecase.go
│ ├── main.go
│ └── pkg/
│ ├── logger/
│ │ └── logger.go
│ └── middleware/
│ ├── acces_log_test.go
│ ├── access_log.go
│ ├── authorization.go
│ ├── context.go
│ ├── context_test.go
│ └── response_writer_wrapper.go
├── go.mod
├── go.sum
├── internal/
│ ├── commands/
│ │ ├── init_app.go
│ │ └── update_app.go
│ ├── config/
│ │ ├── adapter.go
│ │ ├── data.go
│ │ ├── service.go
│ │ ├── storage.go
│ │ ├── usecase.go
│ │ └── validate.go
│ ├── generator/
│ │ ├── chains/
│ │ │ ├── fit_file_extention.go
│ │ │ ├── fit_file_name.go
│ │ │ ├── generate_adapters.go
│ │ │ ├── generate_code.go
│ │ │ ├── generate_services.go
│ │ │ ├── generate_usecase.go
│ │ │ ├── mod_init.go
│ │ │ ├── mod_tidy.go
│ │ │ ├── save_files.go
│ │ │ ├── sync_adapters.go
│ │ │ ├── sync_services.go
│ │ │ ├── sync_usecases.go
│ │ │ └── update_files.go
│ │ ├── chunks/
│ │ │ ├── httpchunk/
│ │ │ │ ├── build.tpl
│ │ │ │ └── chunk.go
│ │ │ ├── mysqlchunk/
│ │ │ │ ├── build.tpl
│ │ │ │ └── chunk.go
│ │ │ ├── mysqlxchunk/
│ │ │ │ ├── build.tpl
│ │ │ │ └── chunk.go
│ │ │ └── pgsqlxchunk/
│ │ │ ├── build.tpl
│ │ │ └── chunk.go
│ │ ├── chunks.go
│ │ ├── error.go
│ │ ├── generator.go
│ │ ├── option.go
│ │ ├── renderer.go
│ │ ├── skeleton.go
│ │ └── templates/
│ │ └── app/
│ │ ├── cmd/
│ │ │ └── http.go.tmpl
│ │ ├── config/
│ │ │ └── app.conf.yaml
│ │ ├── internal/
│ │ │ ├── adapter/
│ │ │ │ ├── method.go.tmpl
│ │ │ │ ├── repository.go.tmpl
│ │ │ │ └── sql_transactor.go.tmpl
│ │ │ ├── app/
│ │ │ │ ├── app.go.tmpl
│ │ │ │ ├── container.go.tmpl
│ │ │ │ ├── database.go.tmpl
│ │ │ │ ├── http.go.tmpl
│ │ │ │ └── logger.go.tmpl
│ │ │ ├── config/
│ │ │ │ └── config.go.tmpl
│ │ │ ├── handler/
│ │ │ │ └── http/
│ │ │ │ ├── api/
│ │ │ │ │ └── v1/
│ │ │ │ │ ├── handler.go.tmpl
│ │ │ │ │ ├── pong.go.tmpl
│ │ │ │ │ └── router.go.tmpl
│ │ │ │ ├── http.go.tmpl
│ │ │ │ └── router.go.tmpl
│ │ │ ├── service/
│ │ │ │ ├── method.go.tmpl
│ │ │ │ ├── service.go.tmpl
│ │ │ │ └── transactor.go.tmpl
│ │ │ └── usecase/
│ │ │ ├── method.go.tmpl
│ │ │ └── usecase.go.tmpl
│ │ ├── main.go.tmpl
│ │ └── pkg/
│ │ ├── logger/
│ │ │ └── logger.go.tmpl
│ │ └── middleware/
│ │ ├── acces_log_test.go.tmpl
│ │ ├── access_log.go.tmpl
│ │ ├── authorization.go.tmpl
│ │ ├── context.go.tmpl
│ │ ├── context_test.go.tmpl
│ │ └── response_writer_wrapper.go.tmpl
│ ├── pkg/
│ │ └── log/
│ │ └── log.go
│ └── prompt/
│ └── prompt.go
├── main.go
├── pkg/
│ └── afero/
│ ├── .gitignore
│ ├── .travis.yml
│ ├── LICENSE.txt
│ ├── README.md
│ ├── afero.go
│ ├── appveyor.yml
│ ├── basepath.go
│ ├── cacheOnReadFs.go
│ ├── const_bsds.go
│ ├── const_win_unix.go
│ ├── copyOnWriteFs.go
│ ├── httpFs.go
│ ├── iofs.go
│ ├── ioutil.go
│ ├── lstater.go
│ ├── match.go
│ ├── mem/
│ │ ├── dir.go
│ │ ├── dirmap.go
│ │ └── file.go
│ ├── memmap.go
│ ├── os.go
│ ├── path.go
│ ├── readonlyfs.go
│ ├── regexpfs.go
│ ├── symlink.go
│ ├── unionFile.go
│ └── util.go
└── vendor/
├── github.com/
│ ├── chzyer/
│ │ └── readline/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── ansi_windows.go
│ │ ├── complete.go
│ │ ├── complete_helper.go
│ │ ├── complete_segment.go
│ │ ├── history.go
│ │ ├── operation.go
│ │ ├── password.go
│ │ ├── rawreader_windows.go
│ │ ├── readline.go
│ │ ├── remote.go
│ │ ├── runebuf.go
│ │ ├── runes.go
│ │ ├── search.go
│ │ ├── std.go
│ │ ├── std_windows.go
│ │ ├── term.go
│ │ ├── term_bsd.go
│ │ ├── term_linux.go
│ │ ├── term_solaris.go
│ │ ├── term_unix.go
│ │ ├── term_windows.go
│ │ ├── terminal.go
│ │ ├── utils.go
│ │ ├── utils_unix.go
│ │ ├── utils_windows.go
│ │ ├── vim.go
│ │ └── windows_api.go
│ ├── fatih/
│ │ └── color/
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── color.go
│ │ └── doc.go
│ ├── iancoleman/
│ │ └── strcase/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── acronyms.go
│ │ ├── camel.go
│ │ ├── doc.go
│ │ └── snake.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── mattn/
│ │ ├── go-colorable/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── colorable_appengine.go
│ │ │ ├── colorable_others.go
│ │ │ ├── colorable_windows.go
│ │ │ ├── go.test.sh
│ │ │ └── noncolorable.go
│ │ └── go-isatty/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── go.test.sh
│ │ ├── isatty_bsd.go
│ │ ├── isatty_others.go
│ │ ├── isatty_plan9.go
│ │ ├── isatty_solaris.go
│ │ ├── isatty_tcgets.go
│ │ └── isatty_windows.go
│ └── spf13/
│ ├── cobra/
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .mailmap
│ │ ├── CHANGELOG.md
│ │ ├── CONDUCT.md
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE.txt
│ │ ├── MAINTAINERS
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── args.go
│ │ ├── bash_completions.go
│ │ ├── bash_completions.md
│ │ ├── bash_completionsV2.go
│ │ ├── cobra.go
│ │ ├── command.go
│ │ ├── command_notwin.go
│ │ ├── command_win.go
│ │ ├── completions.go
│ │ ├── fish_completions.go
│ │ ├── fish_completions.md
│ │ ├── powershell_completions.go
│ │ ├── powershell_completions.md
│ │ ├── projects_using_cobra.md
│ │ ├── shell_completions.go
│ │ ├── shell_completions.md
│ │ ├── user_guide.md
│ │ ├── zsh_completions.go
│ │ └── zsh_completions.md
│ └── pflag/
│ ├── .gitignore
│ ├── .travis.yml
│ ├── LICENSE
│ ├── README.md
│ ├── bool.go
│ ├── bool_slice.go
│ ├── bytes.go
│ ├── count.go
│ ├── duration.go
│ ├── duration_slice.go
│ ├── flag.go
│ ├── float32.go
│ ├── float32_slice.go
│ ├── float64.go
│ ├── float64_slice.go
│ ├── golangflag.go
│ ├── int.go
│ ├── int16.go
│ ├── int32.go
│ ├── int32_slice.go
│ ├── int64.go
│ ├── int64_slice.go
│ ├── int8.go
│ ├── int_slice.go
│ ├── ip.go
│ ├── ip_slice.go
│ ├── ipmask.go
│ ├── ipnet.go
│ ├── string.go
│ ├── string_array.go
│ ├── string_slice.go
│ ├── string_to_int.go
│ ├── string_to_int64.go
│ ├── string_to_string.go
│ ├── uint.go
│ ├── uint16.go
│ ├── uint32.go
│ ├── uint64.go
│ ├── uint8.go
│ └── uint_slice.go
├── golang.org/
│ └── x/
│ ├── sys/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── internal/
│ │ │ └── unsafeheader/
│ │ │ └── unsafeheader.go
│ │ └── unix/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── affinity_linux.go
│ │ ├── aliases.go
│ │ ├── asm_aix_ppc64.s
│ │ ├── asm_bsd_386.s
│ │ ├── asm_bsd_amd64.s
│ │ ├── asm_bsd_arm.s
│ │ ├── asm_bsd_arm64.s
│ │ ├── asm_linux_386.s
│ │ ├── asm_linux_amd64.s
│ │ ├── asm_linux_arm.s
│ │ ├── asm_linux_arm64.s
│ │ ├── asm_linux_mips64x.s
│ │ ├── asm_linux_mipsx.s
│ │ ├── asm_linux_ppc64x.s
│ │ ├── asm_linux_riscv64.s
│ │ ├── asm_linux_s390x.s
│ │ ├── asm_openbsd_mips64.s
│ │ ├── asm_solaris_amd64.s
│ │ ├── asm_zos_s390x.s
│ │ ├── bluetooth_linux.go
│ │ ├── cap_freebsd.go
│ │ ├── constants.go
│ │ ├── dev_aix_ppc.go
│ │ ├── dev_aix_ppc64.go
│ │ ├── dev_darwin.go
│ │ ├── dev_dragonfly.go
│ │ ├── dev_freebsd.go
│ │ ├── dev_linux.go
│ │ ├── dev_netbsd.go
│ │ ├── dev_openbsd.go
│ │ ├── dev_zos.go
│ │ ├── dirent.go
│ │ ├── endian_big.go
│ │ ├── endian_little.go
│ │ ├── env_unix.go
│ │ ├── epoll_zos.go
│ │ ├── errors_freebsd_386.go
│ │ ├── errors_freebsd_amd64.go
│ │ ├── errors_freebsd_arm.go
│ │ ├── errors_freebsd_arm64.go
│ │ ├── fcntl.go
│ │ ├── fcntl_darwin.go
│ │ ├── fcntl_linux_32bit.go
│ │ ├── fdset.go
│ │ ├── fstatfs_zos.go
│ │ ├── gccgo.go
│ │ ├── gccgo_c.c
│ │ ├── gccgo_linux_amd64.go
│ │ ├── ioctl.go
│ │ ├── ioctl_linux.go
│ │ ├── ioctl_zos.go
│ │ ├── mkall.sh
│ │ ├── mkerrors.sh
│ │ ├── pagesize_unix.go
│ │ ├── pledge_openbsd.go
│ │ ├── ptrace_darwin.go
│ │ ├── ptrace_ios.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── readdirent_getdents.go
│ │ ├── readdirent_getdirentries.go
│ │ ├── sockcmsg_dragonfly.go
│ │ ├── sockcmsg_linux.go
│ │ ├── sockcmsg_unix.go
│ │ ├── sockcmsg_unix_other.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_aix.go
│ │ ├── syscall_aix_ppc.go
│ │ ├── syscall_aix_ppc64.go
│ │ ├── syscall_bsd.go
│ │ ├── syscall_darwin.1_12.go
│ │ ├── syscall_darwin.1_13.go
│ │ ├── syscall_darwin.go
│ │ ├── syscall_darwin_amd64.go
│ │ ├── syscall_darwin_arm64.go
│ │ ├── syscall_darwin_libSystem.go
│ │ ├── syscall_dragonfly.go
│ │ ├── syscall_dragonfly_amd64.go
│ │ ├── syscall_freebsd.go
│ │ ├── syscall_freebsd_386.go
│ │ ├── syscall_freebsd_amd64.go
│ │ ├── syscall_freebsd_arm.go
│ │ ├── syscall_freebsd_arm64.go
│ │ ├── syscall_illumos.go
│ │ ├── syscall_linux.go
│ │ ├── syscall_linux_386.go
│ │ ├── syscall_linux_amd64.go
│ │ ├── syscall_linux_amd64_gc.go
│ │ ├── syscall_linux_arm.go
│ │ ├── syscall_linux_arm64.go
│ │ ├── syscall_linux_gc.go
│ │ ├── syscall_linux_gc_386.go
│ │ ├── syscall_linux_gc_arm.go
│ │ ├── syscall_linux_gccgo_386.go
│ │ ├── syscall_linux_gccgo_arm.go
│ │ ├── syscall_linux_mips64x.go
│ │ ├── syscall_linux_mipsx.go
│ │ ├── syscall_linux_ppc.go
│ │ ├── syscall_linux_ppc64x.go
│ │ ├── syscall_linux_riscv64.go
│ │ ├── syscall_linux_s390x.go
│ │ ├── syscall_linux_sparc64.go
│ │ ├── syscall_netbsd.go
│ │ ├── syscall_netbsd_386.go
│ │ ├── syscall_netbsd_amd64.go
│ │ ├── syscall_netbsd_arm.go
│ │ ├── syscall_netbsd_arm64.go
│ │ ├── syscall_openbsd.go
│ │ ├── syscall_openbsd_386.go
│ │ ├── syscall_openbsd_amd64.go
│ │ ├── syscall_openbsd_arm.go
│ │ ├── syscall_openbsd_arm64.go
│ │ ├── syscall_openbsd_mips64.go
│ │ ├── syscall_solaris.go
│ │ ├── syscall_solaris_amd64.go
│ │ ├── syscall_unix.go
│ │ ├── syscall_unix_gc.go
│ │ ├── syscall_unix_gc_ppc64x.go
│ │ ├── syscall_zos_s390x.go
│ │ ├── timestruct.go
│ │ ├── unveil_openbsd.go
│ │ ├── xattr_bsd.go
│ │ ├── zerrors_aix_ppc.go
│ │ ├── zerrors_aix_ppc64.go
│ │ ├── zerrors_darwin_amd64.go
│ │ ├── zerrors_darwin_arm64.go
│ │ ├── zerrors_dragonfly_amd64.go
│ │ ├── zerrors_freebsd_386.go
│ │ ├── zerrors_freebsd_amd64.go
│ │ ├── zerrors_freebsd_arm.go
│ │ ├── zerrors_freebsd_arm64.go
│ │ ├── zerrors_linux.go
│ │ ├── zerrors_linux_386.go
│ │ ├── zerrors_linux_amd64.go
│ │ ├── zerrors_linux_arm.go
│ │ ├── zerrors_linux_arm64.go
│ │ ├── zerrors_linux_mips.go
│ │ ├── zerrors_linux_mips64.go
│ │ ├── zerrors_linux_mips64le.go
│ │ ├── zerrors_linux_mipsle.go
│ │ ├── zerrors_linux_ppc.go
│ │ ├── zerrors_linux_ppc64.go
│ │ ├── zerrors_linux_ppc64le.go
│ │ ├── zerrors_linux_riscv64.go
│ │ ├── zerrors_linux_s390x.go
│ │ ├── zerrors_linux_sparc64.go
│ │ ├── zerrors_netbsd_386.go
│ │ ├── zerrors_netbsd_amd64.go
│ │ ├── zerrors_netbsd_arm.go
│ │ ├── zerrors_netbsd_arm64.go
│ │ ├── zerrors_openbsd_386.go
│ │ ├── zerrors_openbsd_amd64.go
│ │ ├── zerrors_openbsd_arm.go
│ │ ├── zerrors_openbsd_arm64.go
│ │ ├── zerrors_openbsd_mips64.go
│ │ ├── zerrors_solaris_amd64.go
│ │ ├── zerrors_zos_s390x.go
│ │ ├── zptrace_armnn_linux.go
│ │ ├── zptrace_linux_arm64.go
│ │ ├── zptrace_mipsnn_linux.go
│ │ ├── zptrace_mipsnnle_linux.go
│ │ ├── zptrace_x86_linux.go
│ │ ├── zsyscall_aix_ppc.go
│ │ ├── zsyscall_aix_ppc64.go
│ │ ├── zsyscall_aix_ppc64_gc.go
│ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ ├── zsyscall_darwin_amd64.1_13.go
│ │ ├── zsyscall_darwin_amd64.1_13.s
│ │ ├── zsyscall_darwin_amd64.go
│ │ ├── zsyscall_darwin_amd64.s
│ │ ├── zsyscall_darwin_arm64.1_13.go
│ │ ├── zsyscall_darwin_arm64.1_13.s
│ │ ├── zsyscall_darwin_arm64.go
│ │ ├── zsyscall_darwin_arm64.s
│ │ ├── zsyscall_dragonfly_amd64.go
│ │ ├── zsyscall_freebsd_386.go
│ │ ├── zsyscall_freebsd_amd64.go
│ │ ├── zsyscall_freebsd_arm.go
│ │ ├── zsyscall_freebsd_arm64.go
│ │ ├── zsyscall_illumos_amd64.go
│ │ ├── zsyscall_linux.go
│ │ ├── zsyscall_linux_386.go
│ │ ├── zsyscall_linux_amd64.go
│ │ ├── zsyscall_linux_arm.go
│ │ ├── zsyscall_linux_arm64.go
│ │ ├── zsyscall_linux_mips.go
│ │ ├── zsyscall_linux_mips64.go
│ │ ├── zsyscall_linux_mips64le.go
│ │ ├── zsyscall_linux_mipsle.go
│ │ ├── zsyscall_linux_ppc.go
│ │ ├── zsyscall_linux_ppc64.go
│ │ ├── zsyscall_linux_ppc64le.go
│ │ ├── zsyscall_linux_riscv64.go
│ │ ├── zsyscall_linux_s390x.go
│ │ ├── zsyscall_linux_sparc64.go
│ │ ├── zsyscall_netbsd_386.go
│ │ ├── zsyscall_netbsd_amd64.go
│ │ ├── zsyscall_netbsd_arm.go
│ │ ├── zsyscall_netbsd_arm64.go
│ │ ├── zsyscall_openbsd_386.go
│ │ ├── zsyscall_openbsd_amd64.go
│ │ ├── zsyscall_openbsd_arm.go
│ │ ├── zsyscall_openbsd_arm64.go
│ │ ├── zsyscall_openbsd_mips64.go
│ │ ├── zsyscall_solaris_amd64.go
│ │ ├── zsyscall_zos_s390x.go
│ │ ├── zsysctl_openbsd_386.go
│ │ ├── zsysctl_openbsd_amd64.go
│ │ ├── zsysctl_openbsd_arm.go
│ │ ├── zsysctl_openbsd_arm64.go
│ │ ├── zsysctl_openbsd_mips64.go
│ │ ├── zsysnum_darwin_amd64.go
│ │ ├── zsysnum_darwin_arm64.go
│ │ ├── zsysnum_dragonfly_amd64.go
│ │ ├── zsysnum_freebsd_386.go
│ │ ├── zsysnum_freebsd_amd64.go
│ │ ├── zsysnum_freebsd_arm.go
│ │ ├── zsysnum_freebsd_arm64.go
│ │ ├── zsysnum_linux_386.go
│ │ ├── zsysnum_linux_amd64.go
│ │ ├── zsysnum_linux_arm.go
│ │ ├── zsysnum_linux_arm64.go
│ │ ├── zsysnum_linux_mips.go
│ │ ├── zsysnum_linux_mips64.go
│ │ ├── zsysnum_linux_mips64le.go
│ │ ├── zsysnum_linux_mipsle.go
│ │ ├── zsysnum_linux_ppc.go
│ │ ├── zsysnum_linux_ppc64.go
│ │ ├── zsysnum_linux_ppc64le.go
│ │ ├── zsysnum_linux_riscv64.go
│ │ ├── zsysnum_linux_s390x.go
│ │ ├── zsysnum_linux_sparc64.go
│ │ ├── zsysnum_netbsd_386.go
│ │ ├── zsysnum_netbsd_amd64.go
│ │ ├── zsysnum_netbsd_arm.go
│ │ ├── zsysnum_netbsd_arm64.go
│ │ ├── zsysnum_openbsd_386.go
│ │ ├── zsysnum_openbsd_amd64.go
│ │ ├── zsysnum_openbsd_arm.go
│ │ ├── zsysnum_openbsd_arm64.go
│ │ ├── zsysnum_openbsd_mips64.go
│ │ ├── zsysnum_zos_s390x.go
│ │ ├── ztypes_aix_ppc.go
│ │ ├── ztypes_aix_ppc64.go
│ │ ├── ztypes_darwin_amd64.go
│ │ ├── ztypes_darwin_arm64.go
│ │ ├── ztypes_dragonfly_amd64.go
│ │ ├── ztypes_freebsd_386.go
│ │ ├── ztypes_freebsd_amd64.go
│ │ ├── ztypes_freebsd_arm.go
│ │ ├── ztypes_freebsd_arm64.go
│ │ ├── ztypes_illumos_amd64.go
│ │ ├── ztypes_linux.go
│ │ ├── ztypes_linux_386.go
│ │ ├── ztypes_linux_amd64.go
│ │ ├── ztypes_linux_arm.go
│ │ ├── ztypes_linux_arm64.go
│ │ ├── ztypes_linux_mips.go
│ │ ├── ztypes_linux_mips64.go
│ │ ├── ztypes_linux_mips64le.go
│ │ ├── ztypes_linux_mipsle.go
│ │ ├── ztypes_linux_ppc.go
│ │ ├── ztypes_linux_ppc64.go
│ │ ├── ztypes_linux_ppc64le.go
│ │ ├── ztypes_linux_riscv64.go
│ │ ├── ztypes_linux_s390x.go
│ │ ├── ztypes_linux_sparc64.go
│ │ ├── ztypes_netbsd_386.go
│ │ ├── ztypes_netbsd_amd64.go
│ │ ├── ztypes_netbsd_arm.go
│ │ ├── ztypes_netbsd_arm64.go
│ │ ├── ztypes_openbsd_386.go
│ │ ├── ztypes_openbsd_amd64.go
│ │ ├── ztypes_openbsd_arm.go
│ │ ├── ztypes_openbsd_arm64.go
│ │ ├── ztypes_openbsd_mips64.go
│ │ ├── ztypes_solaris_amd64.go
│ │ └── ztypes_zos_s390x.go
│ └── text/
│ ├── AUTHORS
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── PATENTS
│ ├── transform/
│ │ └── transform.go
│ └── unicode/
│ └── norm/
│ ├── composition.go
│ ├── forminfo.go
│ ├── input.go
│ ├── iter.go
│ ├── normalize.go
│ ├── readwriter.go
│ ├── tables10.0.0.go
│ ├── tables11.0.0.go
│ ├── tables12.0.0.go
│ ├── tables13.0.0.go
│ ├── tables9.0.0.go
│ ├── transform.go
│ └── trie.go
├── gopkg.in/
│ └── yaml.v2/
│ ├── .travis.yml
│ ├── LICENSE
│ ├── LICENSE.libyaml
│ ├── NOTICE
│ ├── README.md
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
└── modules.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/go.yaml
================================================
# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
name: Go
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.19
- name: Build
run: go build -v ./...
- name: Test
run: go test -v -race ./...
================================================
FILE: .gitignore
================================================
# ide
.idea
# development
.env
.DS_Store
# testing
*.out
coverage.xml
report.xml
================================================
FILE: LICENSE
================================================
================================================
FILE: README.md
================================================
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/img/goro.logo-dark.png">
<source media="(prefers-color-scheme: light)" srcset="assets/img/goro.logo.png">
<img alt="Goro" title="Goro" width="200" src="assets/img/goro.logo.png">
</picture>
</p>
[](https://t.me/gorohub)
GORO is a tool that creates a neat and easily expandable project layout for your Golang code, including all the essential boilerplate.
## Project Status
⚠️ **Alpha Stage: Work in Progress**
This project is currently in the alpha stage, indicating that it's in the early phases of development. It may contain bugs, undergo frequent changes, and lack certain features. Use it cautiously and feel free to contribute to its improvement. Check the issues for known problems or planned enhancements.
## Why use GORO?
Starting a new Golang project often involves setting up a project layout and defining a solid architecture. GORO, the code generation tool, simplifies this process, allowing you to focus on the core of your project rather than getting bogged down by the initial setup.
### Key Benefits:
- **Rapid Project Kickstart:**
GORO provides a clean and easily extendable Golang project layout, enabling you to kickstart your project swiftly. Say goodbye to the tedious task of manually structuring your project each time.
- **Consistent Code Architecture:**
With GORO, maintain a single, consistent approach to your code architecture across projects. This ensures a streamlined development process and facilitates easier collaboration among team members.
- **Time Savings:**
GORO saves you valuable time by automating the project initialization process. The time spent on setting up a new project with GORO is significantly less than manual implementation, allowing you to dive into your project's core functionalities sooner.
- **Reduced Error Rate:**
GORO minimizes the chances of errors during project setup. By automating the generation of a clean and organized project structure, GORO reduces the risk of common mistakes, letting you focus on the creative and innovative aspects of your project.
- **Flexibility with Frameworks:**
GORO is designed to integrate seamlessly with various web frameworks. Whether you prefer a specific framework or want the flexibility to switch between them, GORO provides the adaptability you need.
Give GORO a try and experience a faster, more efficient start to your Golang projects.
## Getting started
To install GORO, run:
```bash
go install github.com/hanagantig/goro@latest
```
## Run an example service
Goro uses yaml configuration for your service modules.
Download an example config [goro.yaml](https://github.com/hanagantig/goro/blob/main/example/testapp/goro.yaml).
After that you can run `init` command with the config:
```bash
goro init --config /path/to/config/goro.yaml
```
You will be prompted for the workir directory. Provide an absolute path for your service root path.
**Voilà!** Your service is ready. You can run and check the `ping` http method generated by default.
Go to your workdir and run command:
```bash
go run . http --config=./config/app.conf.yaml
```
Open in your browser [http://localhost:8095/api/v1/ping](http://localhost:8095/api/v1/ping)
And you can see `pong` for your `ping`.
## Youtube presentation
You can get more details from the Youtube video (in Russian):
[](https://www.youtube.com/watch?v=hDwqFRUuykQ)
You can also access the slides from the video through [this link](https://docs.google.com/presentation/d/1mDeRz5Sym0MiFYAVWd7Qen3sgVkGWnxR_PQ0bbDzEzo/edit?usp=sharing) from the video
# Layout

```
├── api - your api specs (swagger, protobuf etc.)
│ ├── v1 - version and particular specs inside
│ │ └── swagger.yaml
│ │
├── build - folder with docker files, docker-compose files and so on
│ ├── Dockerfile
│ └── ...
├── cmd - folder with commands provided by your service
│ ├── command_name.go - service command implementation
│ └── ...
├── configs - service config files
│ ├── prod.conf.yaml
│ ├── local.conf.yaml
│ └── dev.conf.yaml
│
├── internal - folder for your internal package. Usually you write code here.
│ ├── app - App structure with bootstrapping, definitions and DI
│ │
│ ├── entity - service entity (they should be used globally through all layers as a data transmitters)
│ │
│ ├── service - list of our services with business logic. This layer interacts with adapter layer.
│ │
│ ├── usecase - usecase layer represent our service behaviour. It's describes all app features - interface for whole service.
│ │ Use case orchestrate with services and aggregate service methods calls. It can be used only in handler layer.
│ ├── adapter - your infrastructure is here. Adapter folder contains packages for database connection, other http/grpc service clients, AMQP connections etc. ...
│ │ ├── webapi
│ │ ├── sqlrepository
│ │ └── ...
│ ├── config - you can find here a code for parsing and loading service configs
│ └── handler - our handlers - a layer to communicate with client. It describes our transport and request/response models.
│ ├── http - http protocol handler
│ │ ├── http.go - http server implementation
│ │ ├── router.go - base router implementation
│ │ └── api - package for service http API methods
│ │ └── v1
│ │ └── models - request/response methods (usually generated from swagger file)
│ │ ├── handler.go - api methods implementation
│ │ └── router.go - api methods routing
│ ├── grpc - grpc protocol handlers
│ ├── amqp - amqp protocol handlers
│ └── ...
└── pkg - your public pkgs
```
## Connect with Us
Stay updated and join our community on Telegram:
[](https://t.me/gorohub)
We value your feedback, comments, and suggestions! Feel free to share your thoughts in our Telegram channel. Whether you have questions, ideas for improvement, or just want to say hello, we'd love to hear from you.
================================================
FILE: cmd/init.go
================================================
package cmd
import (
"github.com/hanagantig/goro/internal/commands"
"github.com/spf13/cobra"
)
// initCmd represents the init command
var initCmd = &cobra.Command{
Use: "init",
Short: "Creates a new service",
Long: `Create service based on goro.yaml config or add needed parameters manually`,
Run: func(cmd *cobra.Command, args []string) {
commands.InitApp(goroCnf)
},
}
================================================
FILE: cmd/root.go
================================================
package cmd
import (
"os"
"github.com/spf13/cobra"
)
var goroCnf string
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "goro",
Short: "Goro app",
Long: ``,
}
func Execute() {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
func init() {
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
rootCmd.PersistentFlags().StringVar(&goroCnf, "config", "", "path to goro yaml file")
rootCmd.AddCommand(initCmd)
rootCmd.AddCommand(updateCmd)
}
================================================
FILE: cmd/update.go
================================================
package cmd
import (
"github.com/hanagantig/goro/internal/commands"
"github.com/spf13/cobra"
)
// initCmd represents the init command
var updateCmd = &cobra.Command{
Use: "update",
Short: "Updates your code after goro.yaml changes",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
commands.UpdateApp(goroCnf)
},
}
================================================
FILE: example/testapp/cmd/http.go
================================================
package cmd
import (
"github.com/spf13/cobra"
"testapp/internal/app"
)
func RunHTTP() *cobra.Command {
cmd := &cobra.Command{
Use: "http",
Short: "Run http server",
}
cmd.RunE = func(cmd *cobra.Command, args []string) error {
a, err := app.GetGlobalApp()
if err != nil {
return err
}
if err := a.StartHTTPServer(); err != nil {
return err
}
return nil
}
return cmd
}
================================================
FILE: example/testapp/config/app.conf.yaml
================================================
http:
port: 8095
host: "localhost"
read_timeout: "3s"
write_timeout: "3s"
main_db:
port: 3306
host: "localhost"
================================================
FILE: example/testapp/go.mod
================================================
module testapp
go 1.21.4
require (
github.com/go-sql-driver/mysql v1.7.1
github.com/google/uuid v1.4.0
github.com/gorilla/mux v1.8.1
github.com/hanagantig/gracy v0.0.0-20231003055507-4d3ebe0e0a0a
github.com/jmoiron/sqlx v1.3.5
github.com/lib/pq v1.10.9
github.com/spf13/cobra v1.8.0
github.com/spf13/viper v1.17.0
github.com/stretchr/testify v1.8.4
go.uber.org/zap v1.26.0
)
require (
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/sagikazarmark/locafero v0.3.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
go.uber.org/multierr v1.10.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/text v0.13.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
================================================
FILE: example/testapp/go.sum
================================================
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/hanagantig/gracy v0.0.0-20231003055507-4d3ebe0e0a0a h1:CR69czWLKNoKYA04kZK7hlxTehZi0weSteDJKvVnRqA=
github.com/hanagantig/gracy v0.0.0-20231003055507-4d3ebe0e0a0a/go.mod h1:zYxTkOjIwjnb6vQqC8NByFToJJFkQenCfRxvIP4gI2M=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg=
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ=
github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
================================================
FILE: example/testapp/goro.yaml
================================================
app:
name: testapp
module: testapp
work_dir: ""
storages:
- mysql
- mysqlx
- pgsqlx
- http
handlers:
- http
- grpc
- amqp
use_case:
deps:
- MyService
- PingPong
methods:
- GetClients
- SignIn
- SignUp
- Pong
services:
- name: MyService
methods:
- GetList
- GetByFilter
deps:
- MyRepo
- name: PingPong
methods:
- Pong
deps:
- MyRepo
- name: OrderService
methods:
- GetByID
deps:
- OrdersRepo
adapters:
- name: MyRepo
storage: mysql
methods:
- GetOne
- GetAll
- Save
- name: ClientRepo
storage: mysqlx
methods:
- GitByDate
- GetByID
- name: UserRepo
storage: pgsqlx
methods:
- GetByID
- name: OrdersRepo
storage: http
methods:
- GetByID
================================================
FILE: example/testapp/internal/adapter/httprepo/ordersrepo/get_by_id.go
================================================
package ordersrepo
import (
"context"
)
func (r *Repository) GetByID(ctx context.Context) {
// TODO: put your repository logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/adapter/httprepo/ordersrepo/repository.go
================================================
// Code generated by goro;
package ordersrepo
// This file was generated by the goro tool.
import (
"net/http"
)
type Repository struct {
client *http.Client
}
func NewRepository(client *http.Client) *Repository {
return &Repository{
client: client,
}
}
================================================
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/get_all.go
================================================
package myrepo
import (
"context"
)
func (r *Repository) GetAll(ctx context.Context) {
// TODO: put your repository logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/get_one.go
================================================
package myrepo
import (
"context"
)
func (r *Repository) GetOne(ctx context.Context) {
// TODO: put your repository logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/repository.go
================================================
// Code generated by goro;
package myrepo
// This file was generated by the goro tool.
import (
"database/sql"
"testapp/internal/adapter/mysqlrepo"
)
type Repository struct {
mysqlrepo.Transactor
}
func NewRepository(conn *sql.DB) *Repository {
return &Repository{
mysqlrepo.NewTransactor(conn),
}
}
================================================
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/save.go
================================================
package myrepo
import (
"context"
)
func (r *Repository) Save(ctx context.Context) {
// TODO: put your repository logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/adapter/mysqlrepo/transactor.go
================================================
package mysqlrepo
import (
"context"
"database/sql"
"errors"
"github.com/google/uuid"
)
type contextKey string
const txKey contextKey = "sql_tx"
const txIDKey contextKey = "tx_id"
type Transactor struct {
conn *sql.DB
wraps map[context.Context][]func(ctx context.Context) error
}
func NewTransactor(c *sql.DB) Transactor {
return Transactor{
conn: c,
wraps: make(map[context.Context][]func(ctx context.Context) error),
}
}
func (t *Transactor) NewTxContext(ctx context.Context) context.Context {
return context.WithValue(ctx, txIDKey, uuid.NewString())
}
func (t *Transactor) hasTxID(ctx context.Context) bool {
txID := ctx.Value(txIDKey)
return txID != nil && txID != ""
}
func (t *Transactor) InTransaction(ctx context.Context, txFunc func(ctx context.Context) error) error {
if !t.hasTxID(ctx) {
return errors.New("not transaction context. Please create it with NewTxContext")
}
if _, ok := t.wraps[ctx]; !ok {
t.wraps[ctx] = make([]func(ctx context.Context) error, 0, 0)
}
t.wraps[ctx] = append(t.wraps[ctx], txFunc)
return nil
}
func (t *Transactor) GetConn(ctx context.Context) *sql.DB {
conn, ok := ctx.Value(txKey).(*sql.DB)
if !ok {
return t.conn
}
return conn
}
func (t *Transactor) RunTransaction(ctx context.Context) error {
defer t.reset(ctx)
tx, err := t.conn.BeginTx(ctx, nil)
if err != nil {
return err
}
txCtx := context.WithValue(ctx, txKey, tx)
for _, wrap := range t.wraps[ctx] {
err = wrap(txCtx)
if err != nil {
err = tx.Rollback()
if err != nil {
return err
}
}
}
err = tx.Commit()
if err != nil {
return err
}
return nil
}
func (t *Transactor) reset(ctx context.Context) {
delete(t.wraps, ctx)
}
================================================
FILE: example/testapp/internal/adapter/mysqlxrepo/clientrepo/get_by_id.go
================================================
package clientrepo
import (
"context"
)
func (r *Repository) GetByID(ctx context.Context) {
// TODO: put your repository logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/adapter/mysqlxrepo/clientrepo/git_by_date.go
================================================
package clientrepo
import (
"context"
)
func (r *Repository) GitByDate(ctx context.Context) {
// TODO: put your repository logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/adapter/mysqlxrepo/clientrepo/repository.go
================================================
// Code generated by goro;
package clientrepo
// This file was generated by the goro tool.
import (
"github.com/jmoiron/sqlx"
"testapp/internal/adapter/mysqlxrepo"
)
type Repository struct {
mysqlxrepo.Transactor
}
func NewRepository(conn *sqlx.DB) *Repository {
return &Repository{
mysqlxrepo.NewTransactor(conn),
}
}
================================================
FILE: example/testapp/internal/adapter/mysqlxrepo/transactor.go
================================================
package mysqlxrepo
import (
"context"
"errors"
"github.com/google/uuid"
"github.com/jmoiron/sqlx"
)
type contextKey string
const txKey contextKey = "sql_tx"
const txIDKey contextKey = "tx_id"
type Transactor struct {
conn *sqlx.DB
wraps map[context.Context][]func(ctx context.Context) error
}
func NewTransactor(c *sqlx.DB) Transactor {
return Transactor{
conn: c,
wraps: make(map[context.Context][]func(ctx context.Context) error),
}
}
func (t *Transactor) NewTxContext(ctx context.Context) context.Context {
return context.WithValue(ctx, txIDKey, uuid.NewString())
}
func (t *Transactor) hasTxID(ctx context.Context) bool {
txID := ctx.Value(txIDKey)
return txID != nil && txID != ""
}
func (t *Transactor) InTransaction(ctx context.Context, txFunc func(ctx context.Context) error) error {
if !t.hasTxID(ctx) {
return errors.New("not transaction context. Please create it with NewTxContext")
}
if _, ok := t.wraps[ctx]; !ok {
t.wraps[ctx] = make([]func(ctx context.Context) error, 0, 0)
}
t.wraps[ctx] = append(t.wraps[ctx], txFunc)
return nil
}
func (t *Transactor) GetConn(ctx context.Context) *sqlx.DB {
conn, ok := ctx.Value(txKey).(*sqlx.DB)
if !ok {
return t.conn
}
return conn
}
func (t *Transactor) RunTransaction(ctx context.Context) error {
defer t.reset(ctx)
tx, err := t.conn.BeginTx(ctx, nil)
if err != nil {
return err
}
txCtx := context.WithValue(ctx, txKey, tx)
for _, wrap := range t.wraps[ctx] {
err = wrap(txCtx)
if err != nil {
err = tx.Rollback()
if err != nil {
return err
}
}
}
err = tx.Commit()
if err != nil {
return err
}
return nil
}
func (t *Transactor) reset(ctx context.Context) {
delete(t.wraps, ctx)
}
================================================
FILE: example/testapp/internal/adapter/pgsqlxrepo/transactor.go
================================================
package pgsqlxrepo
import (
"context"
"errors"
"github.com/google/uuid"
"github.com/jmoiron/sqlx"
)
type contextKey string
const txKey contextKey = "sql_tx"
const txIDKey contextKey = "tx_id"
type Transactor struct {
conn *sqlx.DB
wraps map[context.Context][]func(ctx context.Context) error
}
func NewTransactor(c *sqlx.DB) Transactor {
return Transactor{
conn: c,
wraps: make(map[context.Context][]func(ctx context.Context) error),
}
}
func (t *Transactor) NewTxContext(ctx context.Context) context.Context {
return context.WithValue(ctx, txIDKey, uuid.NewString())
}
func (t *Transactor) hasTxID(ctx context.Context) bool {
txID := ctx.Value(txIDKey)
return txID != nil && txID != ""
}
func (t *Transactor) InTransaction(ctx context.Context, txFunc func(ctx context.Context) error) error {
if !t.hasTxID(ctx) {
return errors.New("not transaction context. Please create it with NewTxContext")
}
if _, ok := t.wraps[ctx]; !ok {
t.wraps[ctx] = make([]func(ctx context.Context) error, 0, 0)
}
t.wraps[ctx] = append(t.wraps[ctx], txFunc)
return nil
}
func (t *Transactor) GetConn(ctx context.Context) *sqlx.DB {
conn, ok := ctx.Value(txKey).(*sqlx.DB)
if !ok {
return t.conn
}
return conn
}
func (t *Transactor) RunTransaction(ctx context.Context) error {
defer t.reset(ctx)
tx, err := t.conn.BeginTx(ctx, nil)
if err != nil {
return err
}
txCtx := context.WithValue(ctx, txKey, tx)
for _, wrap := range t.wraps[ctx] {
err = wrap(txCtx)
if err != nil {
err = tx.Rollback()
if err != nil {
return err
}
}
}
err = tx.Commit()
if err != nil {
return err
}
return nil
}
func (t *Transactor) reset(ctx context.Context) {
delete(t.wraps, ctx)
}
================================================
FILE: example/testapp/internal/adapter/pgsqlxrepo/userrepo/get_by_id.go
================================================
package userrepo
import (
"context"
)
func (r *Repository) GetByID(ctx context.Context) {
// TODO: put your repository logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/adapter/pgsqlxrepo/userrepo/repository.go
================================================
// Code generated by goro;
package userrepo
// This file was generated by the goro tool.
import (
"github.com/jmoiron/sqlx"
"testapp/internal/adapter/pgsqlxrepo"
)
type Repository struct {
pgsqlxrepo.Transactor
}
func NewRepository(conn *sqlx.DB) *Repository {
return &Repository{
pgsqlxrepo.NewTransactor(conn),
}
}
================================================
FILE: example/testapp/internal/app/app.go
================================================
// Code generated by goro; DO NOT EDIT.
package app
// This file was generated by the goro tool.
// Editing this file might prove futile when you re-run the goro commands
import (
"database/sql"
"errors"
"github.com/jmoiron/sqlx"
"net/http"
"sync"
"go.uber.org/zap/zapcore"
"testapp/internal/config"
)
type Logger interface {
Debug(string, ...zapcore.Field)
Info(string, ...zapcore.Field)
Error(string, ...zapcore.Field)
Fatal(string, ...zapcore.Field)
}
type App struct {
cfg config.Config
c *Container
cOnce *sync.Once
//hc health.Checker
//hcOnce *sync.Once
mysql *sql.DB
mysqlx *sqlx.DB
pgsqlx *sqlx.DB
http *http.Client
logger Logger
}
var a *App
func NewApp(configPath string) (*App, error) {
cfg, err := config.NewConfig(configPath)
if err != nil {
return nil, err
}
app := &App{
cOnce: &sync.Once{},
//hcOnce: &sync.Once{},
cfg: cfg,
}
//goro:init logger
app.initLogger()
//goro:init healthChecker
//app.initHealthChecker()
mysqlConnect, err := app.newMySQLConnect(cfg.MainDB)
if err != nil {
return nil, err
}
app.mysql = mysqlConnect
mysqlxConn, err := app.newMySQLxConnect(cfg.MainDB)
if err != nil {
return nil, err
}
app.mysqlx = mysqlxConn
pgSqlxConn, err := app.newPgSqlxConnect(cfg.MainDB)
if err != nil {
return nil, err
}
app.pgsqlx = pgSqlxConn
httpClient := app.newHttpClient()
app.http = httpClient
//goro:init dependencies
app.c = NewContainer(app.mysql, app.mysqlx, app.pgsqlx, app.http)
return app, nil
}
func SetGlobalApp(app *App) {
a = app
}
func GetGlobalApp() (*App, error) {
if a == nil {
return nil, errors.New("global app is not initialized")
}
return a, nil
}
================================================
FILE: example/testapp/internal/app/container.go
================================================
// Code generated by goro; DO NOT EDIT.
package app
// This file was generated by the goro tool.
// Editing this file might prove futile when you re-run the goro commands
import (
"database/sql"
"github.com/jmoiron/sqlx"
"net/http"
"testapp/internal/usecase"
"testapp/internal/service/myservice"
"testapp/internal/service/orderservice"
"testapp/internal/service/pingpong"
"testapp/internal/adapter/httprepo/ordersrepo"
"testapp/internal/adapter/mysqlrepo/myrepo"
"testapp/internal/adapter/mysqlxrepo/clientrepo"
"testapp/internal/adapter/pgsqlxrepo/userrepo"
)
type Container struct {
mysql *sql.DB
mysqlx *sqlx.DB
pgsqlx *sqlx.DB
http *http.Client
deps map[string]interface{}
}
func NewContainer(mysqlConnect *sql.DB, mysqlxConn *sqlx.DB, pgSqlxConn *sqlx.DB, httpClient *http.Client) *Container {
return &Container{
mysql: mysqlConnect,
mysqlx: mysqlxConn,
pgsqlx: pgSqlxConn,
http: httpClient,
deps: make(map[string]interface{}),
}
}
func (c *Container) GetUseCase() *usecase.UseCase {
return usecase.NewUseCase(c.getMyService(), c.getPingPong())
}
func (c *Container) getMysql() *sql.DB {
return c.mysql
}
func (c *Container) getMysqlx() *sqlx.DB {
return c.mysqlx
}
func (c *Container) getPgsqlx() *sqlx.DB {
return c.pgsqlx
}
func (c *Container) getHttp() *http.Client {
return c.http
}
func (c *Container) getMyService() *myservice.Service {
return myservice.NewService(c.getMyRepo())
}
func (c *Container) getPingPong() *pingpong.Service {
return pingpong.NewService(c.getMyRepo())
}
func (c *Container) getOrderService() *orderservice.Service {
return orderservice.NewService(c.getOrdersRepo())
}
func (c *Container) getMyRepo() *myrepo.Repository {
return myrepo.NewRepository(c.getMysql())
}
func (c *Container) getClientRepo() *clientrepo.Repository {
return clientrepo.NewRepository(c.getMysqlx())
}
func (c *Container) getUserRepo() *userrepo.Repository {
return userrepo.NewRepository(c.getPgsqlx())
}
func (c *Container) getOrdersRepo() *ordersrepo.Repository {
return ordersrepo.NewRepository(c.getHttp())
}
================================================
FILE: example/testapp/internal/app/database.go
================================================
// Code generated by goro; DO NOT EDIT.
package app
// This file was generated by the goro tool.
// Editing this file might prove futile when you re-run the goro commands
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
"net/url"
"strconv"
"strings"
"testapp/internal/config"
)
func (a *App) newMySQLConnect(cfg config.SQLConfig) (*sql.DB, error) {
builder := strings.Builder{}
builder.WriteString(cfg.User)
builder.WriteByte(':')
builder.WriteString(cfg.Password)
builder.WriteString("@tcp(")
builder.WriteString(fmt.Sprintf("%s:%s", cfg.Host, cfg.Port))
builder.WriteString(")/")
builder.WriteString(cfg.DBName)
builder.WriteString("?timeout=")
builder.WriteString(cfg.Timeout.String())
builder.WriteString("&readTimeout=")
builder.WriteString(cfg.ReadTimeout.String())
builder.WriteString("&writeTimeout=")
builder.WriteString(cfg.WriteTimeout.String())
builder.WriteString("&interpolateParams=")
builder.WriteString(strconv.FormatBool(cfg.InterpolateParams))
if cfg.Charset != "" {
builder.WriteString("&charset=")
builder.WriteString(cfg.Charset)
}
builder.WriteString("&parseTime=")
builder.WriteString(strconv.FormatBool(cfg.ParseTime))
if cfg.Collation != "" {
builder.WriteString("&collation=")
builder.WriteString(cfg.Collation)
}
if cfg.Timezone != "" {
builder.WriteString("&loc=")
builder.WriteString(url.QueryEscape(cfg.Timezone))
}
dsn := builder.String()
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, err
}
db.SetConnMaxLifetime(cfg.ConnMaxLifetime)
db.SetMaxOpenConns(cfg.MaxOpenConns)
db.SetMaxIdleConns(cfg.MaxIdleConns)
return db, nil
}
func (a *App) newMySQLxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {
builder := strings.Builder{}
builder.WriteString(cfg.User)
builder.WriteByte(':')
builder.WriteString(cfg.Password)
builder.WriteString("@tcp(")
builder.WriteString(fmt.Sprintf("%s:%s", cfg.Host, cfg.Port))
builder.WriteString(")/")
builder.WriteString(cfg.DBName)
builder.WriteString("?timeout=")
builder.WriteString(cfg.Timeout.String())
builder.WriteString("&readTimeout=")
builder.WriteString(cfg.ReadTimeout.String())
builder.WriteString("&writeTimeout=")
builder.WriteString(cfg.WriteTimeout.String())
builder.WriteString("&interpolateParams=")
builder.WriteString(strconv.FormatBool(cfg.InterpolateParams))
if cfg.Charset != "" {
builder.WriteString("&charset=")
builder.WriteString(cfg.Charset)
}
builder.WriteString("&parseTime=")
builder.WriteString(strconv.FormatBool(cfg.ParseTime))
if cfg.Collation != "" {
builder.WriteString("&collation=")
builder.WriteString(cfg.Collation)
}
if cfg.Timezone != "" {
builder.WriteString("&loc=")
builder.WriteString(url.QueryEscape(cfg.Timezone))
}
dsn := builder.String()
db, err := sqlx.Open("mysql", dsn)
if err != nil {
return nil, err
}
db.SetConnMaxLifetime(cfg.ConnMaxLifetime)
db.SetMaxOpenConns(cfg.MaxOpenConns)
db.SetMaxIdleConns(cfg.MaxIdleConns)
return db, nil
}
func (a *App) newPgSqlxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {
builder := strings.Builder{}
builder.WriteString(fmt.Sprintf("host=%s port=%s ", cfg.Host, cfg.Port))
builder.WriteString(fmt.Sprintf("user=%s password=%s ", cfg.User, cfg.Password))
builder.WriteString(fmt.Sprintf("dbname=%s ", cfg.DBName))
builder.WriteString(fmt.Sprintf("timezone=%s ", cfg.Timezone))
builder.WriteString("sslmode=disable ")
params := builder.String()
db, err := sqlx.Open("postgres", params)
if err != nil {
return nil, err
}
db.SetConnMaxLifetime(cfg.ConnMaxLifetime)
db.SetMaxOpenConns(cfg.MaxOpenConns)
db.SetMaxIdleConns(cfg.MaxIdleConns)
return db, err
}
================================================
FILE: example/testapp/internal/app/http.go
================================================
// Code generated by goro; DO NOT EDIT.
package app
// This file was generated by the goro tool.
// Editing this file might prove futile when you re-run the goro commands
import (
"fmt"
"github.com/hanagantig/gracy"
"go.uber.org/zap"
client "net/http"
"testapp/internal/handler/http"
"testapp/internal/handler/http/api/v1"
)
func (a *App) StartHTTPServer() error {
go func() {
a.startHTTPServer()
}()
err := gracy.Wait()
if err != nil {
a.logger.Error("failed to gracefully shutdown server", zap.Error(err))
return err
}
a.logger.Info("server gracefully stopped")
return nil
}
func (a *App) startHTTPServer() {
handler := v1.NewHandler(a.c.GetUseCase(), a.logger)
router := http.NewRouter()
router.
//WithMetrics().
//WithHealthChecks(app.hc).
WithSwagger().
WithHandler(handler, a.logger).
WithProfiler()
srv := http.NewServer(a.cfg.HTTP)
srv.RegisterRoutes(router)
gracy.AddCallback(func() error {
return srv.Stop()
})
a.logger.Info(fmt.Sprintf("starting HTTP server at %s:%s", a.cfg.HTTP.Host, a.cfg.HTTP.Port))
err := srv.Start()
if err != nil {
a.logger.Fatal("Fail to start %s http server:", zap.String("app", a.cfg.App.Name), zap.Error(err))
}
}
func (a *App) newHttpClient() *client.Client {
client := client.Client{}
return &client
}
================================================
FILE: example/testapp/internal/app/logger.go
================================================
// Code generated by goro; DO NOT EDIT.
package app
// This file was generated by the goro tool.
// Editing this file might prove futile when you re-run the goro commands
import (
"log"
"testapp/pkg/logger"
)
func (a *App) initLogger() {
l, err := logger.NewLogger()
if err != nil {
log.Fatal(err)
}
a.logger = l
}
================================================
FILE: example/testapp/internal/config/config.go
================================================
package config
import (
"github.com/spf13/viper"
"time"
)
type AppConfig struct {
Name string
Env string
Version string
}
type HTTPConfig struct {
Host string
Port string
ReadTimeout time.Duration
WriteTimeout time.Duration
}
type ThirdPartyService struct {
Url string
}
type SQLConfig struct {
Host string
Port string
DBName string
User string
Password string
Timeout time.Duration
ReadTimeout time.Duration
WriteTimeout time.Duration
InterpolateParams bool
Charset string
ParseTime bool
Timezone string
Collation string
ConnMaxLifetime time.Duration
MaxOpenConns int
MaxIdleConns int
}
type Config struct {
App AppConfig
// Server
HTTP HTTPConfig
MainDB SQLConfig
Service1 ThirdPartyService
}
func NewConfig(filePath string) (Config, error) {
viper.SetConfigFile(filePath)
conf := Config{}
if err := viper.ReadInConfig(); err != nil {
return conf, err
}
viper.SetDefault("app.name", "testapp")
viper.SetDefault("app.env", "dev")
viper.SetDefault("app.version", "v1")
viper.SetDefault("http.read_timeout", "1s")
viper.SetDefault("http.write_timeout", "1s")
conf = Config{
App: AppConfig{
Name: viper.GetString("app.name"),
Env: viper.GetString("app.env"),
Version: viper.GetString("app.version"),
},
HTTP: HTTPConfig{
Host: viper.GetString("http.host"),
Port: viper.GetString("http.port"),
ReadTimeout: viper.GetDuration("http.read_timeout"),
WriteTimeout: viper.GetDuration("http.write_timeout"),
},
MainDB: SQLConfig{
Host: viper.GetString("main_db.host"),
Port: viper.GetString("main_db.port"),
DBName: viper.GetString("main_db.name"),
User: viper.GetString("main_db.user"),
Password: viper.GetString("main_db.password"),
ReadTimeout: viper.GetDuration("main_db.read_timeout"),
WriteTimeout: viper.GetDuration("main_db.write_timeout"),
Timeout: viper.GetDuration("main_db.timeout"),
InterpolateParams: false,
Charset: "UTF-8",
ParseTime: true,
Timezone: "Europe/Moscow",
Collation: "",
},
}
return conf, nil
}
================================================
FILE: example/testapp/internal/handler/http/api/v1/handler.go
================================================
package v1
import (
"context"
"testapp/pkg/logger"
)
type UseCase interface {
GetClients(ctx context.Context) (interface{}, error)
SignIn(ctx context.Context) (interface{}, error)
SignUp(ctx context.Context) (interface{}, error)
Pong(ctx context.Context) (interface{}, error)
}
type Handler struct {
uc UseCase
logger logger.Logger
}
func NewHandler(uc UseCase, logs logger.Logger) *Handler {
return &Handler{uc: uc, logger: logs}
}
================================================
FILE: example/testapp/internal/handler/http/api/v1/pong.go
================================================
package v1
import (
"encoding/json"
"go.uber.org/zap"
"net/http"
)
func (h Handler) Ping(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
ctx := r.Context()
res, err := h.uc.Pong(ctx)
err = json.NewEncoder(w).Encode(res)
if err != nil {
h.logger.Error("failed to encode json", zap.Error(err))
}
}
================================================
FILE: example/testapp/internal/handler/http/api/v1/router.go
================================================
package v1
import (
"github.com/gorilla/mux"
"net/http"
)
func (h *Handler) GetVersion() string {
return "v1"
}
func (h *Handler) GetContentType() string {
return ""
}
func (h *Handler) AddRoutes(r *mux.Router) {
r.HandleFunc("/ping", h.Ping).Methods(http.MethodGet)
}
================================================
FILE: example/testapp/internal/handler/http/http.go
================================================
package http
import (
"context"
"fmt"
"net/http"
"testapp/internal/config"
)
type Server struct {
srv *http.Server
}
func NewServer(cfg config.HTTPConfig) *Server {
server := &Server{
&http.Server{
Addr: fmt.Sprintf("%s:%s", cfg.Host, cfg.Port),
ReadTimeout: cfg.ReadTimeout,
//WriteTimeout: cfg.WriteTimeout,
},
}
return server
}
func (s *Server) RegisterRoutes(r *Router) {
s.srv.Handler = r.router
}
func (s *Server) Start() error {
if s.srv.Handler == nil {
return fmt.Errorf("no routes have registered")
}
err := s.srv.ListenAndServe()
if err != http.ErrServerClosed {
return err
}
return nil
}
func (s *Server) Stop() error {
return s.srv.Shutdown(context.Background())
}
================================================
FILE: example/testapp/internal/handler/http/router.go
================================================
package http
import (
"github.com/gorilla/mux"
"net/http"
"net/http/pprof"
"testapp/pkg/logger"
"testapp/pkg/middleware"
)
type HandlerRouter interface {
AddRoutes(r *mux.Router)
GetVersion() string
GetContentType() string
}
type Router struct {
router *mux.Router
}
func NewRouter() *Router {
return &Router{router: mux.NewRouter()}
}
func (r *Router) WithMetrics() *Router {
//r.router.Use(promlib.NewMiddleware(promlib.DefHTTPRequestDurBuckets).Handler)
//r.router.Use(tracing.NewHTTPMiddleware(opentracing.GlobalTracer()).Handler)
return r
}
func (r *Router) WithSwagger() *Router {
fs := http.FileServer(http.Dir("./swagger/"))
r.router.PathPrefix("/swagger/").Handler(http.StripPrefix("/swagger/", fs))
return r
}
func (r *Router) WithHandler(h HandlerRouter, logger logger.Logger) *Router {
api := r.router.PathPrefix("/api/" + h.GetVersion()).Subrouter()
//ct := h.GetContentType()
//if h.GetContentType() != "" {
// api = api.Headers("Content-Type", "application/json; charset=UTF-8")
//}
api.Use(middleware.AddContextMiddleware(logger))
api.Use(middleware.AccessLogMiddleware(logger))
//apiV1 := api.PathPrefix("/v1/").Subrouter()
h.AddRoutes(api)
return r
}
func (r *Router) WithProfiler() *Router {
r.router.HandleFunc("/debug/pprof/", pprof.Index)
// Not securely - so disable it
// r.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
r.router.HandleFunc("/debug/pprof/profile", pprof.Profile)
r.router.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
r.router.HandleFunc("/debug/pprof/trace", pprof.Trace)
r.router.Handle("/debug/pprof/goroutine", pprof.Handler("goroutine"))
r.router.Handle("/debug/pprof/heap", pprof.Handler("heap"))
r.router.Handle("/debug/pprof/threadcreate", pprof.Handler("threadcreate"))
r.router.Handle("/debug/pprof/block", pprof.Handler("block"))
r.router.Handle("/debug/pprof/allocs", pprof.Handler("allocs"))
r.router.Handle("/debug/pprof/mutex", pprof.Handler("mutex"))
return r
}
================================================
FILE: example/testapp/internal/service/myservice/get_by_filter.go
================================================
package myservice
import (
"context"
)
func (s *Service) GetByFilter(ctx context.Context) {
// TODO: put your business logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/service/myservice/get_list.go
================================================
package myservice
import (
"context"
)
func (s *Service) GetList(ctx context.Context) {
// TODO: put your business logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/service/myservice/service.go
================================================
// Code generated by goro;
package myservice
// This file was generated by the goro tool.
import (
"testapp/internal/service"
)
type myRepo interface {
service.Transactor
// TODO: define interface to inject a service or an adapter
}
type Service struct {
myRepo myRepo
}
func NewService(myRepo myRepo) *Service {
return &Service{
myRepo: myRepo,
}
}
================================================
FILE: example/testapp/internal/service/orderservice/get_by_id.go
================================================
package orderservice
import (
"context"
)
func (s *Service) GetByID(ctx context.Context) {
// TODO: put your business logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/service/orderservice/service.go
================================================
// Code generated by goro;
package orderservice
// This file was generated by the goro tool.
type ordersRepo interface {
// TODO: define interface to inject a service or an adapter
}
type Service struct {
ordersRepo ordersRepo
}
func NewService(ordersRepo ordersRepo) *Service {
return &Service{
ordersRepo: ordersRepo,
}
}
================================================
FILE: example/testapp/internal/service/pingpong/pong.go
================================================
package pingpong
import (
"context"
)
func (s *Service) Pong(ctx context.Context) {
// TODO: put your business logic here
panic("implement me")
}
================================================
FILE: example/testapp/internal/service/pingpong/service.go
================================================
// Code generated by goro;
package pingpong
// This file was generated by the goro tool.
import (
"testapp/internal/service"
)
type myRepo interface {
service.Transactor
// TODO: define interface to inject a service or an adapter
}
type Service struct {
myRepo myRepo
}
func NewService(myRepo myRepo) *Service {
return &Service{
myRepo: myRepo,
}
}
================================================
FILE: example/testapp/internal/service/transactor.go
================================================
package service
import (
"context"
)
type Transactor interface {
NewTxContext(ctx context.Context) context.Context
InTransaction(ctx context.Context, txFunc func(ctx context.Context) error) error
RunTransaction(ctx context.Context) error
}
================================================
FILE: example/testapp/internal/usecase/get_clients.go
================================================
package usecase
import (
"context"
)
func (u *UseCase) GetClients(ctx context.Context) (interface{}, error) {
// TODO: put your service call logic here
return "implement UseCase method GetClients", nil
}
================================================
FILE: example/testapp/internal/usecase/pong.go
================================================
package usecase
import (
"context"
)
func (u *UseCase) Pong(ctx context.Context) (interface{}, error) {
// TODO: put your service call logic here
return "implement UseCase method Pong", nil
}
================================================
FILE: example/testapp/internal/usecase/sign_in.go
================================================
package usecase
import (
"context"
)
func (u *UseCase) SignIn(ctx context.Context) (interface{}, error) {
// TODO: put your service call logic here
return "implement UseCase method SignIn", nil
}
================================================
FILE: example/testapp/internal/usecase/sign_up.go
================================================
package usecase
import (
"context"
)
func (u *UseCase) SignUp(ctx context.Context) (interface{}, error) {
// TODO: put your service call logic here
return "implement UseCase method SignUp", nil
}
================================================
FILE: example/testapp/internal/usecase/usecase.go
================================================
// Code generated by goro;
package usecase
// This file was generated by the goro tool.
type myService interface {
// TODO: define interface to inject a service
}
type pingPong interface {
// TODO: define interface to inject a service
}
type UseCase struct {
myService myService
pingPong pingPong
}
func NewUseCase(myService myService, pingPong pingPong) *UseCase {
return &UseCase{
myService: myService,
pingPong: pingPong,
}
}
================================================
FILE: example/testapp/main.go
================================================
package main
import (
"log"
"github.com/spf13/cobra"
"testapp/cmd"
"testapp/internal/app"
)
// ldflags pass variables
var (
commit = "none"
version = "dev"
serviceName = "testapp"
)
var configFilePath string
func initApp() {
a, err := app.NewApp(configFilePath)
if err != nil {
log.Fatal("Fail to create app: ", err)
}
app.SetGlobalApp(a)
}
func main() {
rootCmd := &cobra.Command{
Use: "ping-pong service",
Short: "Main entry-point command for the application",
}
rootCmd.PersistentFlags().StringVar(&configFilePath, "config", "", "config file path")
cobra.OnInitialize(initApp)
rootCmd.AddCommand(
cmd.RunHTTP(),
)
if err := rootCmd.Execute(); err != nil {
log.Fatalf("failed to execute root cmd: %v", err)
return
}
}
================================================
FILE: example/testapp/pkg/logger/logger.go
================================================
package logger
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type Logger interface {
Debug(string, ...zapcore.Field)
Info(string, ...zapcore.Field)
Error(string, ...zapcore.Field)
Fatal(string, ...zapcore.Field)
}
func NewLogger() (*zap.Logger, error) {
return zap.NewProduction()
}
================================================
FILE: example/testapp/pkg/middleware/acces_log_test.go
================================================
package middleware
import (
"bytes"
"net/http"
"net/http/httptest"
"net/url"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)
type panicHandler struct{}
func (t panicHandler) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {
panic("test_message")
}
type badRequestHandler struct{}
func (t badRequestHandler) ServeHTTP(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusBadRequest)
_, _ = w.Write([]byte("bad_request"))
}
func TestAccessLogMiddleware_BadRequest(t *testing.T) {
sink := &MemorySink{new(bytes.Buffer)}
logger := tNewLogger(t, "alSink", sink)
w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "/", nil)
r.Header.Set(context.XRequestIDHeader, "test_request_id")
r = r.WithContext(context.InitFromHTTP(w, r, ""))
handler := badRequestHandler{}
middleware := AccessLogMiddleware(logger)
middleware(handler).ServeHTTP(w, r)
assert.Equal(t, http.StatusBadRequest, w.Code)
expectedContains := []string{
`"level":"info"`,
`"msg":"access_log"`,
`"method":"GET","path":"/"`,
`"status_code":400`,
`"duration":`,
`"response_body":"bad_request"`,
`"request_id":"test_request_id"`,
}
for _, expected := range expectedContains {
assert.Contains(t, sink.String(), expected)
}
}
func TestAccessLogMiddleware_PanicRecovery(t *testing.T) {
sink := &MemorySink{new(bytes.Buffer)}
logger := tNewLogger(t, "alPanicSink", sink)
w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "/", nil)
r.Header.Set(context.XRequestIDHeader, "test_request_id")
r = r.WithContext(context.InitFromHTTP(w, r, ""))
handler := panicHandler{}
middleware := AccessLogMiddleware(logger)
middleware(handler).ServeHTTP(w, r)
assert.Equal(t, http.StatusInternalServerError, w.Code)
expectedContains := []string{
`"level":"error"`,
`"msg":"access_log"`,
`"method":"GET","path":"/"`,
`"event":"recovered after panic"`,
`"panic_value":"test_message"`,
`"status_code":500`,
`"stacktrace":"goroutine`,
`"request_id":"test_request_id"`,
}
for _, expected := range expectedContains {
assert.Contains(t, sink.String(), expected)
}
}
func tNewLogger(t *testing.T, sinkName string, sink zap.Sink) zlog.Logger {
err := zap.RegisterSink(sinkName, func(*url.URL) (zap.Sink, error) {
return sink, nil
})
require.NoError(t, err)
logger := zlog.Nop()
require.NoError(t, err)
return logger
}
// MemorySink implements zap.Sink by writing all messages to a buffer.
type MemorySink struct {
*bytes.Buffer
}
// Implement Close and Sync as no-ops to satisfy the interface. The Write
// method is provided by the embedded buffer.
func (s *MemorySink) Close() error { return nil }
func (s *MemorySink) Sync() error { return nil }
================================================
FILE: example/testapp/pkg/middleware/access_log.go
================================================
package middleware
import (
"bytes"
"io/ioutil"
"net/http"
"runtime/debug"
"testapp/pkg/logger"
"time"
)
func AccessLogMiddleware(log logger.Logger) func(next http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
//ctx := r.Context()
start := time.Now()
responseWriterWrapper := newResponseWriterWrapper(w)
reqBody, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Error("Failed to read request body")
}
if len(reqBody) > 0 {
err = r.Body.Close() // must close
if err != nil {
log.Error("Failed to close body reader")
} else {
r.Body = ioutil.NopCloser(bytes.NewBuffer(reqBody))
}
}
defer func() {
fields := make(map[string]interface{})
pnc := recover()
if pnc != nil {
fields["event"] = "recovered after panic"
fields["panic_value"] = pnc
fields["stacktrace"] = string(debug.Stack())
responseWriterWrapper.WriteHeader(http.StatusInternalServerError)
}
fields["duration"] = time.Since(start)
fields["method"] = r.Method
fields["path"] = r.URL.Path
fields["status_code"] = responseWriterWrapper.StatusCode()
//if responseWriterWrapper.statusCode == http.StatusBadRequest {
fields["response_body"] = string(responseWriterWrapper.Body())
fields["request_body"] = string(reqBody)
//}
if responseWriterWrapper.statusCode == http.StatusInternalServerError {
log.Error("access_log")
} else {
log.Info("access_log")
}
}()
next.ServeHTTP(responseWriterWrapper, r)
})
}
}
================================================
FILE: example/testapp/pkg/middleware/authorization.go
================================================
package middleware
import (
"net/http"
)
var (
apiKey = "test"
)
func AuthorizationMiddleware() func(next http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
authHeader := r.Header.Get("Auth-API-Key")
userAgent := r.UserAgent()
if authHeader != apiKey || userAgent == "" {
http.Error(w, "Authorization error.", http.StatusUnauthorized)
return
}
next.ServeHTTP(w, r)
})
}
}
================================================
FILE: example/testapp/pkg/middleware/context.go
================================================
package middleware
import (
"context"
"net/http"
"testapp/pkg/logger"
)
func AddContextMiddleware(log logger.Logger) func(next http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
requestID := r.Header.Get("X-Request-ID")
//if requestID == "" {
// w.WriteHeader(http.StatusBadRequest)
// _, err := w.Write([]byte(`request id header not found`))
// if err != nil {
// log.Error("failed to write response body")
// }
// return
//}
_ = requestID
ctx := context.Background()
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
}
================================================
FILE: example/testapp/pkg/middleware/context_test.go
================================================
package middleware
import (
"go.uber.org/zap"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestContextMiddleware_RequestIDHeaderNotFound(t *testing.T) {
handler := panicHandler{}
middleware := AddContextMiddleware(zap.NewNop())
w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "/", nil)
middleware(handler).ServeHTTP(w, r)
assert.Equal(t, http.StatusBadRequest, w.Code)
assert.Contains(t, w.Body.String(), `request id header not found`)
}
================================================
FILE: example/testapp/pkg/middleware/response_writer_wrapper.go
================================================
package middleware
import (
"bufio"
"errors"
"net"
"net/http"
)
// responseWriterWrapper is used to wrap http.ResponseWriter.
type responseWriterWrapper struct {
http.ResponseWriter
statusCode int
body []byte
}
// NewResponseWriterWrapper creates a responseWriterWrapper.
func newResponseWriterWrapper(w http.ResponseWriter) *responseWriterWrapper {
return &responseWriterWrapper{
ResponseWriter: w,
statusCode: http.StatusOK,
}
}
// WriteHeader wraps WriteHeader method for http.ResponseWriter.
func (rw *responseWriterWrapper) WriteHeader(code int) {
rw.statusCode = code
rw.ResponseWriter.WriteHeader(code)
}
// Write wraps Write method for http.ResponseWriter.
func (rw *responseWriterWrapper) Write(body []byte) (int, error) {
rw.body = body
return rw.ResponseWriter.Write(body)
}
// Hijack wraps Hijack method for http.Hijacker.
// It is used for WebSocket handler.
func (rw *responseWriterWrapper) Hijack() (net.Conn, *bufio.ReadWriter, error) {
h, ok := rw.ResponseWriter.(http.Hijacker)
if ok {
return h.Hijack()
}
return nil, nil, errors.New("websocket: response does not implement http.Hijacker")
}
// StatusCode returns the status code.
func (rw *responseWriterWrapper) StatusCode() int {
return rw.statusCode
}
// Body returns the response body.
func (rw *responseWriterWrapper) Body() []byte {
return rw.body
}
================================================
FILE: go.mod
================================================
module github.com/hanagantig/goro
go 1.18
require (
github.com/fatih/color v1.13.0
github.com/iancoleman/strcase v0.2.0
github.com/manifoldco/promptui v0.9.0
github.com/spf13/afero v1.8.2
github.com/spf13/cobra v1.4.0
gopkg.in/yaml.v2 v2.4.0
)
require (
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect
github.com/hanagantig/gracy v0.0.0-20220614134223-823658db0aec // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/mattn/go-colorable v0.1.9 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
golang.org/x/text v0.3.4 // indirect
)
================================================
FILE: go.sum
================================================
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/hanagantig/gracy v0.0.0-20220614134223-823658db0aec h1:hY+c8yrjk1APGjFIXxAk9izbUNJrmXgAiQh71DVO1Yc=
github.com/hanagantig/gracy v0.0.0-20220614134223-823658db0aec/go.mod h1:zYxTkOjIwjnb6vQqC8NByFToJJFkQenCfRxvIP4gI2M=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0=
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA=
github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg=
github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=
github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo=
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
================================================
FILE: internal/commands/init_app.go
================================================
package commands
import (
"github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/internal/generator"
"github.com/hanagantig/goro/internal/generator/chains"
"github.com/hanagantig/goro/internal/pkg/log"
)
func InitApp(configPath string) {
cfg, err := config.NewConfig(configPath)
if err != nil {
log.Fatal(err)
}
err = cfg.AskAndSetName()
if err != nil {
log.Fatal(err)
}
err = cfg.AskAndSetWorkDir()
if err != nil {
log.Fatal(err)
}
err = cfg.Validate()
if err != nil {
log.Fatal(err)
}
g := generator.NewGenerator(cfg)
g.AddChain(chains.NewFitFileNameChain())
g.AddChain(chains.NewGenerateAdapterChain())
g.AddChain(chains.NewGenerateServicesChain())
g.AddChain(chains.NewGenerateUseCaseChain())
g.AddChain(chains.NewGenerateCodeChain())
g.AddChain(chains.NewFitFileExtensionChain())
g.AddChain(chains.NewSaveFilesChain())
g.AddChain(chains.NewModInitChain())
g.AddChain(chains.NewModTidyChain())
err = g.Generate()
if err != nil {
log.Fatal(err)
}
}
================================================
FILE: internal/commands/update_app.go
================================================
package commands
import (
"github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/internal/generator"
"github.com/hanagantig/goro/internal/generator/chains"
"github.com/hanagantig/goro/internal/pkg/log"
)
func UpdateApp(configPath string) {
cfg, err := config.NewConfig(configPath)
if err != nil {
log.Fatal(err)
}
err = cfg.AskAndSetName()
if err != nil {
log.Fatal(err)
}
err = cfg.AskAndSetWorkDir()
if err != nil {
log.Fatal(err)
}
err = cfg.Validate()
if err != nil {
log.Fatal(err)
}
g := generator.NewGenerator(cfg)
g.AddChain(chains.NewFitFileNameChain())
g.AddChain(chains.NewGenerateAdapterChain())
g.AddChain(chains.NewGenerateServicesChain())
g.AddChain(chains.NewGenerateUseCaseChain())
g.AddChain(chains.NewGenerateCodeChain())
g.AddChain(chains.NewFitFileExtensionChain())
g.AddChain(chains.NewSyncUseCaseChain())
g.AddChain(chains.NewSyncServicesChain())
g.AddChain(chains.NewSyncAdaptersChain())
g.AddChain(chains.NewUpdateFilesChain())
g.AddChain(chains.NewModTidyChain())
err = g.Generate()
if err != nil {
log.Fatal(err)
}
}
================================================
FILE: internal/config/adapter.go
================================================
package config
import (
"strings"
)
type Adapter struct {
Name string `yaml:"name"`
Storage Storage `yaml:"storage"`
Methods []string `yaml:"methods"`
AppModule string
}
type Adapters []Adapter
func (a Adapter) GetPkgName() string {
return strings.ToLower(a.Name)
}
func (a Adapter) GetConstructorName() string {
return "NewRepository"
}
func (a Adapter) IsTransactional() bool {
return transactionalStorages[a.Storage]
}
func (a Adapters) GetMap() map[string]struct{} {
res := make(map[string]struct{}, 0)
for _, ad := range a {
res[ad.Name] = struct{}{}
}
return res
}
func (a Adapters) GetTransactionalMap() map[string]bool {
res := make(map[string]bool, len(a))
for _, ad := range a {
res[ad.Name] = ad.IsTransactional()
}
return res
}
================================================
FILE: internal/config/data.go
================================================
package config
import (
"fmt"
"io/ioutil"
"os"
"strings"
"github.com/manifoldco/promptui"
"gopkg.in/yaml.v2"
)
type DependencyName string
type Config struct {
App App `yaml:"app"`
UseCase UseCase `yaml:"use_case"`
Storages Storages `yaml:"storages"`
Services Services `yaml:"services"`
Adapters Adapters `yaml:"adapters"`
Chunks []Chunk
}
type Chunk struct {
Name string
Scope string
ArgName string
ReturnType string
DefinitionImports string
BuildImports string
InitFunc string
Build string
Configs string
InitConfig string
InitHasErr bool
}
type App struct {
Name string `yaml:"name"`
Module string `yaml:"module"`
WorkDir string `yaml:"work_dir"`
}
type Dependency struct {
Pkg string `yaml:"pkg"`
Type string `yaml:"type"`
BuildFunc string `yaml:"build_func"`
Methods []string `yaml:"methods"`
Deps []string `yaml:"deps"`
}
func (d Dependency) GetPackageName() string {
path := strings.Split(d.Pkg, "/")
if len(path) > 0 {
return path[len(path)-1]
}
return ""
}
func NewConfig(pathToFile string) (Config, error) {
if pathToFile == "" {
return Config{}, nil
}
return LoadDataFromYaml(pathToFile)
}
func LoadDataFromYaml(pathToFile string) (Config, error) {
var data Config
_, err := os.Stat(pathToFile)
if err != nil {
return data, err
}
fileContents, _ := ioutil.ReadFile(pathToFile)
err = yaml.Unmarshal(fileContents, &data)
return data, err
}
func (c *Config) AskAndSetName() error {
if c.App.Name != "" {
return nil
}
name, err := c.askName()
if err != nil {
return err
}
c.App.Name = name
return nil
}
func (c *Config) askName() (string, error) {
return (&promptui.Prompt{
Label: "Enter an app name",
Validate: func(s string) error {
if s == "" {
return fmt.Errorf("config name can't be empty")
}
return nil
},
}).Run()
}
func (c *Config) AskAndSetWorkDir() error {
if c.App.WorkDir != "" {
return nil
}
wd, err := c.askWorkDir()
if err != nil {
return err
}
if wd == "" {
wd, err = os.Getwd()
if err != nil {
return err
}
}
c.App.WorkDir = wd
return nil
}
func (c *Config) askWorkDir() (string, error) {
return (&promptui.Prompt{
Label: "Enter an app work dir or leave it empty to use current directory",
// TODO: validate path
}).Run()
}
func (c *Config) GetChunksByScope(scope string) []Chunk {
chunks := make([]Chunk, 0, len(c.Chunks))
for _, ch := range c.Chunks {
if strings.HasPrefix(ch.Scope, scope) {
chunks = append(chunks, ch)
}
}
return chunks
}
func (c *Config) GetChunksByScopeAndInitHasErr(scope string) []Chunk {
chunks := make([]Chunk, 0, len(c.Chunks))
for _, ch := range c.Chunks {
if strings.HasPrefix(ch.Scope, scope) && ch.InitHasErr {
chunks = append(chunks, ch)
}
}
return chunks
}
func (c *Config) GetChunksByScopeAndInitHasNotErr(scope string) []Chunk {
chunks := make([]Chunk, 0, len(c.Chunks))
for _, ch := range c.Chunks {
if strings.HasPrefix(ch.Scope, scope) && !ch.InitHasErr {
chunks = append(chunks, ch)
}
}
return chunks
}
================================================
FILE: internal/config/service.go
================================================
package config
import (
"strings"
)
type Service struct {
AppModule string
Name string `yaml:"name"`
Methods []string `yaml:"methods"`
Deps []string `yaml:"deps"`
}
type Services []Service
func (s Service) GetConstructorName() string {
return "NewService"
}
func (s Service) GetPkgName() string {
return strings.ToLower(s.Name)
}
func (s Service) CheckTransactionalDeps(txAdapterMap map[string]bool) bool {
for _, depsName := range s.Deps {
tx := txAdapterMap[depsName]
if tx {
return true
}
}
return false
}
func (s Service) GetTransactionalDeps(txAdapterMap map[string]bool) []string {
res := make([]string, 0, len(s.Deps))
for _, depsName := range s.Deps {
tx := txAdapterMap[depsName]
if tx {
res = append(res, depsName)
}
}
return res
}
func (s Service) GetNonTransactionalDeps(txAdapterMap map[string]bool) []string {
res := make([]string, 0, len(s.Deps))
for _, depsName := range s.Deps {
tx := txAdapterMap[depsName]
if !tx {
res = append(res, depsName)
}
}
return res
}
func (s Services) GetMap() map[string]struct{} {
res := make(map[string]struct{}, 0)
for _, svc := range s {
res[svc.Name] = struct{}{}
}
return res
}
================================================
FILE: internal/config/storage.go
================================================
package config
var storagePackages = map[Storage]string{
"mysql": "\"database/sql\"",
"mysqlx": "\"github.com/jmoiron/sqlx\"",
"pgsqlx": "\"github.com/jmoiron/sqlx\"",
"http": "\"net/http\"",
}
var connectionsType = map[Storage]string{
"mysql": "*sql.DB",
"mysqlx": "*sqlx.DB",
"pgsqlx": "*sqlx.DB",
"http": "*http.Client",
}
var connectionName = map[Storage]string{
"pgsqlx": "conn",
"mysql": "conn",
"mysqlx": "conn",
"http": "client",
}
var transactionalStorages = map[Storage]bool{
"pgsqlx": true,
"mysql": true,
"mysqlx": true,
"http": false,
}
type Storage string
type Storages []Storage
func (s Storages) GetMap() map[Storage]struct{} {
res := make(map[Storage]struct{}, 0)
for _, st := range s {
res[st] = struct{}{}
}
return res
}
func (s Storage) String() string {
return string(s)
}
func (s Storage) GetFolderName() string {
return string(s) + "repo"
}
func (s Storage) GetConnImportName() string {
return storagePackages[s]
}
func (s Storage) GetConnectionType() string {
return connectionsType[s]
}
func (s Storage) GetConnectionName() string {
return connectionName[s]
}
================================================
FILE: internal/config/usecase.go
================================================
package config
type UseCase struct {
Methods []string `yaml:"methods"`
Deps []string `yaml:"deps"`
}
func (u UseCase) GetConstructorName() string {
return "NewUseCase"
}
================================================
FILE: internal/config/validate.go
================================================
package config
import (
"fmt"
"regexp"
)
var methodName = regexp.MustCompile("^[A-Z][A-Za-z]+$")
func (c *Config) Validate() error {
if c.App.Module == "" || c.App.Name == "" || c.App.WorkDir == "" {
return fmt.Errorf("module, name and work_dir can't be empty")
}
storeMap := c.Storages.GetMap()
adapterMap := c.Adapters.GetMap()
serviceMap := c.Services.GetMap()
for _, adapter := range c.Adapters {
if _, ok := storeMap[adapter.Storage]; !ok {
return fmt.Errorf("not supported adapter storage type '%v'", adapter.Storage)
}
for _, m := range adapter.Methods {
if !methodName.Match([]byte(m)) {
return fmt.Errorf("adapter method name '%v' should start with capitalized letter", m)
}
}
}
for _, svc := range c.Services {
for _, d := range svc.Deps {
_, adapterOk := adapterMap[d]
_, serviceOk := serviceMap[d]
if !(adapterOk || serviceOk) {
return fmt.Errorf("service dependancy '%v' should be adapter or other service", d)
}
}
for _, m := range svc.Methods {
if !methodName.Match([]byte(m)) {
return fmt.Errorf("service method name '%v' should start with capitalized letter", m)
}
}
}
for _, ucDep := range c.UseCase.Deps {
if _, ok := serviceMap[ucDep]; !ok {
return fmt.Errorf("usecase dependancy '%v' should be a services", ucDep)
}
}
for _, ucm := range c.UseCase.Methods {
if !methodName.Match([]byte(ucm)) {
return fmt.Errorf("usecase method name '%v' should start with capitalized letter", ucm)
}
}
return nil
}
================================================
FILE: internal/generator/chains/fit_file_extention.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"os"
"strings"
)
type fitFileExtensionChain struct{}
func NewFitFileExtensionChain() *fitFileExtensionChain {
return &fitFileExtensionChain{}
}
func (f *fitFileExtensionChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
err := fs.Walk("/",
func(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}
if f.IsDir() {
return nil
}
if strings.Contains(f.Name(), ".tmpl") {
if _, err = fs.Stat(path); !os.IsNotExist(err) {
err = fs.Rename(path, strings.Replace(path, ".tmpl", "", 1))
if err != nil {
return err
}
}
}
return err
},
)
return fs, err
}
func (f *fitFileExtensionChain) Name() string {
return "Fit file extensions"
}
func (f *fitFileExtensionChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/fit_file_name.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"github.com/iancoleman/strcase"
"os"
"strings"
)
type fitFileNameChain struct{}
func NewFitFileNameChain() *fitFileNameChain {
return &fitFileNameChain{}
}
func (f *fitFileNameChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
appName := strcase.ToKebab(data.App.Name)
toRename := make([]string, 0, 0)
err := fs.Walk("/", func(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}
if !f.IsDir() {
return nil
}
if strings.Contains(f.Name(), "{{app_name}}") {
if _, err = fs.Stat(path); !os.IsNotExist(err) {
toRename = append(toRename, path)
}
}
return nil
})
for _, p := range toRename {
err = fs.Rename(p, strings.Replace(p, "{{app_name}}", appName, 1))
if err != nil {
return nil, err
}
fs.RemoveAll(p)
}
return fs, err
}
func (f *fitFileNameChain) Name() string {
return "Fit file names"
}
func (f *fitFileNameChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/generate_adapters.go
================================================
package chains
import (
"fmt"
"os"
"strings"
"github.com/iancoleman/strcase"
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
)
type generateAdapterChain struct{}
func NewGenerateAdapterChain() *generateAdapterChain {
return &generateAdapterChain{}
}
func (g *generateAdapterChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
adapterPath := "/internal/adapter"
repoFilePath := adapterPath + "/repository.go.tmpl"
methodFilePath := "/internal/adapter/method.go.tmpl"
transactorFilePath := "/internal/adapter/sql_transactor.go.tmpl"
repositoryTmpl, err := fs.ReadFile(repoFilePath)
if err != nil {
return nil, err
}
methodTmpl, err := fs.ReadFile(methodFilePath)
if err != nil {
return nil, err
}
transactorTmpl, err := fs.ReadFile(transactorFilePath)
if err != nil {
return nil, err
}
err = fs.Remove(repoFilePath)
if err != nil {
return nil, err
}
err = fs.Remove(methodFilePath)
if err != nil {
return nil, err
}
err = fs.Remove(transactorFilePath)
if err != nil {
return nil, err
}
for _, adapter := range data.Adapters {
adapter.AppModule = data.App.Module
storageFolderPath := fmt.Sprintf("%s/%s", adapterPath, adapter.Storage.GetFolderName())
if _, err := fs.Stat(storageFolderPath); os.IsNotExist(err) {
err = fs.Mkdir(storageFolderPath, os.ModeDir)
if err != nil {
return nil, err
}
if adapter.IsTransactional() {
generated, err := generate(transactorFilePath, transactorTmpl, adapter)
if err != nil {
return nil, err
}
err = fs.WriteFile(storageFolderPath+"/transactor.go.tmpl", generated, 0644)
if err != nil {
return nil, err
}
}
}
repoPath := storageFolderPath + "/" + strings.ToLower(adapter.Name)
if _, err := fs.Stat(repoPath); os.IsNotExist(err) {
err = fs.Mkdir(repoPath, os.ModeDir)
if err != nil {
return nil, err
}
}
generated, err := generate(repoFilePath, repositoryTmpl, adapter)
if err != nil {
return nil, err
}
err = fs.WriteFile(repoPath+"/repository.go.tmpl", generated, 0644)
if err != nil {
return nil, err
}
for _, method := range adapter.Methods {
methodData := struct {
PkgName string
MethodName string
}{
PkgName: adapter.GetPkgName(),
MethodName: method,
}
methodGen, err := generate(methodFilePath, methodTmpl, methodData)
if err != nil {
return nil, err
}
err = fs.WriteFile(repoPath+"/"+strcase.ToSnake(method)+".go.tmpl", methodGen, 0644)
if err != nil {
return nil, err
}
}
}
return fs, nil
}
func (g *generateAdapterChain) Name() string {
return "Generate useCase chain"
}
func (g *generateAdapterChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/generate_code.go
================================================
package chains
import (
"bytes"
"fmt"
"go/format"
"os"
"strings"
"text/template"
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/internal/generator"
"github.com/hanagantig/goro/pkg/afero"
)
type generateCodeChain struct{}
func NewGenerateCodeChain() *generateCodeChain {
return &generateCodeChain{}
}
func generate(path string, content []byte, data interface{}) ([]byte, error) {
fMap := generator.FuncMap
buf := bytes.NewBuffer(nil)
t := template.New(path).Funcs(fMap)
tmpl := template.Must(t.Parse(string(content)))
err := tmpl.Execute(buf, data)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
func (g *generateCodeChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
err := fs.Walk("/",
func(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}
if f.IsDir() {
return nil
}
if f.Name() == ".DS_Store" || strings.Contains(path, ".idea") {
return nil
}
content, err := fs.ReadFile(path)
formatted, err := generate(f.Name(), content, data)
if err != nil {
return err
}
if strings.Contains(f.Name(), ".go") {
formatted, err = format.Source(formatted)
if err != nil {
return fmt.Errorf("formated golang file: %w", err)
}
}
err = fs.WriteFile(path, formatted, 0644)
if err != nil {
return err
}
return nil
},
)
return fs, err
}
func (g *generateCodeChain) Name() string {
return "Generate code"
}
func (g *generateCodeChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/generate_services.go
================================================
package chains
import (
"os"
"github.com/iancoleman/strcase"
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
)
type generateServicesChain struct{}
func NewGenerateServicesChain() *generateServicesChain {
return &generateServicesChain{}
}
func (g *generateServicesChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
servicePath := "/internal/service"
serviceFilePath := "/internal/service/service.go.tmpl"
methodFilePath := "/internal/service/method.go.tmpl"
svcTmpl, err := fs.ReadFile(serviceFilePath)
if err != nil {
return nil, err
}
methodTmpl, err := fs.ReadFile(methodFilePath)
if err != nil {
return nil, err
}
err = fs.Remove(serviceFilePath)
if err != nil {
return nil, err
}
err = fs.Remove(methodFilePath)
if err != nil {
return nil, err
}
trxMap := data.Adapters.GetTransactionalMap()
for _, svc := range data.Services {
svc.AppModule = data.App.Module
path := servicePath + "/" + svc.GetPkgName()
if _, err := fs.Stat(path); os.IsNotExist(err) {
err = fs.Mkdir(path, os.ModeDir)
if err != nil {
return nil, err
}
}
svcData := struct {
Service entity.Service
IsTrx bool
TrxDeps []string
NonTrxDeps []string
}{
Service: svc,
IsTrx: svc.CheckTransactionalDeps(trxMap),
TrxDeps: svc.GetTransactionalDeps(trxMap),
NonTrxDeps: svc.GetNonTransactionalDeps(trxMap),
}
generated, err := generate(path, svcTmpl, svcData)
if err != nil {
return nil, err
}
err = fs.WriteFile(path+"/service.go.tmpl", generated, 0644)
if err != nil {
return nil, err
}
for _, method := range svc.Methods {
methodData := struct {
PkgName string
MethodName string
}{
PkgName: svc.GetPkgName(),
MethodName: method,
}
generatedMethod, err := generate(path, methodTmpl, methodData)
if err != nil {
return nil, err
}
err = fs.WriteFile(path+"/"+strcase.ToSnake(method)+".go", generatedMethod, 0644)
if err != nil {
return nil, err
}
}
}
return fs, nil
}
func (g *generateServicesChain) Name() string {
return "Generate services chain"
}
func (g *generateServicesChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/generate_usecase.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"github.com/iancoleman/strcase"
)
type generateUseCaseChain struct{}
func NewGenerateUseCaseChain() *generateUseCaseChain {
return &generateUseCaseChain{}
}
func (g *generateUseCaseChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
useCasePath := "/internal/usecase"
useCaseFilePath := "/internal/usecase/usecase.go.tmpl"
methodFilePath := "/internal/usecase/method.go.tmpl"
useCaseTmpl, err := fs.ReadFile(useCaseFilePath)
if err != nil {
return nil, err
}
methodTmpl, err := fs.ReadFile(methodFilePath)
if err != nil {
return nil, err
}
err = fs.Remove(useCaseFilePath)
if err != nil {
return nil, err
}
err = fs.Remove(methodFilePath)
if err != nil {
return nil, err
}
generated, err := generate(useCaseFilePath, useCaseTmpl, data.UseCase)
if err != nil {
return nil, err
}
err = fs.WriteFile(useCasePath+"/usecase.go.tmpl", generated, 0644)
if err != nil {
return nil, err
}
for _, method := range data.UseCase.Methods {
methodGen, err := generate(methodFilePath, methodTmpl, method)
if err != nil {
return nil, err
}
err = fs.WriteFile(useCasePath+"/"+strcase.ToSnake(method)+".go.tmpl", methodGen, 0644)
if err != nil {
return nil, err
}
}
return fs, nil
}
func (g *generateUseCaseChain) Name() string {
return "Generate useCase chain"
}
func (g *generateUseCaseChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/mod_init.go
================================================
package chains
import (
"errors"
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"os/exec"
)
type modInitChain struct{}
func NewModInitChain() *modInitChain {
return &modInitChain{}
}
func (m *modInitChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
cmd := exec.Command("go", "mod", "init", data.App.Name)
cmd.Dir = data.App.WorkDir
output, err := cmd.CombinedOutput()
out := string(output)
if err != nil && out != "" {
return fs, errors.New(out)
}
return fs, nil
}
func (m *modInitChain) Name() string {
return "Go mod init"
}
func (m *modInitChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/mod_tidy.go
================================================
package chains
import (
"errors"
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"os/exec"
)
type modTidyChain struct{}
func NewModTidyChain() *modTidyChain {
return &modTidyChain{}
}
func (m *modTidyChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
cmd := exec.Command("go", "mod", "tidy")
cmd.Dir = data.App.WorkDir
output, err := cmd.CombinedOutput()
out := string(output)
if err != nil && out != "" {
return fs, errors.New(out)
}
return fs, nil
}
func (m *modTidyChain) Name() string {
return "Go mod tidy"
}
func (m *modTidyChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/save_files.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"os"
"path/filepath"
)
type saveFilesChain struct {
data entity.Config
}
func NewSaveFilesChain() *saveFilesChain {
return &saveFilesChain{}
}
func (g *saveFilesChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
err := fs.Walk("/",
func(path string, f os.FileInfo, err error) error {
appPath := filepath.Join(data.App.WorkDir, path)
if f.IsDir() {
return os.MkdirAll(appPath, os.FileMode(0775))
}
file, err := os.Create(appPath)
if err != nil {
return err
}
content, err := fs.ReadFile(path)
if err != nil {
return err
}
_, err = file.Write(content)
if err != nil {
return err
}
return nil
},
)
return fs, err
}
func (g *saveFilesChain) Name() string {
return "Save files to work dir"
}
func (g *saveFilesChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/sync_adapters.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"os"
"path/filepath"
"strings"
)
type syncAdaptersChain struct {
data entity.Config
}
func NewSyncAdaptersChain() *syncAdaptersChain {
return &syncAdaptersChain{}
}
func (g *syncAdaptersChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
adapterPath := filepath.Join(data.App.WorkDir, "/internal/adapter")
var loadedAdapters []string
for _, adapter := range data.Adapters {
typeFolder := adapter.Storage.String() + "repo"
loadedAdapters = append(loadedAdapters, strings.ToLower(filepath.Join(typeFolder, adapter.Name)))
}
typeFolders, err := os.ReadDir(adapterPath)
if err != nil {
return fs, err
}
for _, types := range typeFolders {
if types.IsDir() {
adaptersFolder, err := os.ReadDir(filepath.Join(adapterPath, types.Name()))
for _, af := range adaptersFolder {
if !af.IsDir() {
continue
}
if !contains(loadedAdapters, strings.ToLower(filepath.Join(types.Name(), af.Name()))) {
err = os.RemoveAll(filepath.Join(adapterPath, types.Name(), af.Name()))
if err != nil {
return fs, err
}
}
}
}
}
return fs, nil
}
func (g *syncAdaptersChain) Name() string {
return "Synchronize adapters"
}
func (g *syncAdaptersChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/sync_services.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"os"
"path/filepath"
"strings"
)
type syncServicesChain struct {
data entity.Config
}
func NewSyncServicesChain() *syncServicesChain {
return &syncServicesChain{}
}
func contains(s []string, str string) bool {
for _, v := range s {
if v == str {
return true
}
}
return false
}
func (g *syncServicesChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
servicePath := filepath.Join(data.App.WorkDir, "/internal/service")
var loadedServices []string
for _, service := range data.Services {
loadedServices = append(loadedServices, strings.ToLower(service.Name))
}
servicesFolder, err := os.ReadDir(servicePath)
for _, sf := range servicesFolder {
if sf.IsDir() {
if !contains(loadedServices, strings.ToLower(sf.Name())) {
err = os.RemoveAll(filepath.Join(servicePath, sf.Name()))
if err != nil {
return fs, err
}
}
}
}
return fs, nil
}
func (g *syncServicesChain) Name() string {
return "Synchronize services"
}
func (g *syncServicesChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/sync_usecases.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"github.com/iancoleman/strcase"
"os"
"path/filepath"
"strings"
)
type syncUseCaseChain struct {
data entity.Config
}
func NewSyncUseCaseChain() *syncUseCaseChain {
return &syncUseCaseChain{}
}
func (g *syncUseCaseChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
useCasePath := filepath.Join(data.App.WorkDir, "/internal/usecase")
var loadedUseCaseFiles []string
for _, ucm := range data.UseCase.Methods {
loadedUseCaseFiles = append(loadedUseCaseFiles, strcase.ToSnake(ucm)+".go")
}
useCaseFiles, err := os.ReadDir(useCasePath)
for _, ucf := range useCaseFiles {
if !contains(loadedUseCaseFiles, strings.ToLower(ucf.Name())) {
err = os.RemoveAll(filepath.Join(useCasePath, ucf.Name()))
if err != nil {
return fs, err
}
}
}
return fs, nil
}
func (g *syncUseCaseChain) Name() string {
return "Synchronize usecases"
}
func (g *syncUseCaseChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chains/update_files.go
================================================
package chains
import (
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"os"
"path/filepath"
"strings"
)
type updateFilesChain struct {
data entity.Config
}
func NewUpdateFilesChain() *updateFilesChain {
return &updateFilesChain{}
}
func isRegenerated(name string) bool {
return strings.Contains(name, "internal/app/container.go") || strings.Contains(name, "internal/usecase")
}
func (g *updateFilesChain) Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error) {
err := fs.Walk("/",
func(path string, f os.FileInfo, err error) error {
appPath := filepath.Join(data.App.WorkDir, path)
_, err = os.Stat(appPath)
if err != nil && !os.IsNotExist(err) {
return err
}
if err == nil && !isRegenerated(appPath) {
return nil
}
if f.IsDir() {
return os.MkdirAll(appPath, os.FileMode(0775))
}
file, err := os.Create(appPath)
if err != nil {
return err
}
content, err := fs.ReadFile(path)
if err != nil {
return err
}
_, err = file.Write(content)
if err != nil {
return err
}
return nil
},
)
return fs, err
}
func (g *updateFilesChain) Name() string {
return "Updates file in workdir"
}
func (g *updateFilesChain) Rollback() error {
return nil
}
================================================
FILE: internal/generator/chunks/httpchunk/build.tpl
================================================
func (a *App) newHttpClient() *client.Client {
client := client.Client{}
return &client
}
================================================
FILE: internal/generator/chunks/httpchunk/chunk.go
================================================
package httpchunk
import (
_ "embed"
"github.com/hanagantig/goro/internal/config"
)
//go:embed build.tpl
var buildTmpl string
const name = "http"
const initName = "httpClient"
func NewHttpChunk() config.Chunk {
return config.Chunk{
Name: name,
Scope: "storage.http",
ArgName: initName,
ReturnType: "*http.Client",
DefinitionImports: "\"net/http\"",
BuildImports: "client \"net/http\"",
InitFunc: "newHttpClient",
Build: buildTmpl,
Configs: "http configs",
InitConfig: "",
InitHasErr: false,
}
}
================================================
FILE: internal/generator/chunks/mysqlchunk/build.tpl
================================================
func (a *App) newMySQLConnect(cfg config.SQLConfig) (*sql.DB, error) {
builder := strings.Builder{}
builder.WriteString(cfg.User)
builder.WriteByte(':')
builder.WriteString(cfg.Password)
builder.WriteString("@tcp(")
builder.WriteString(fmt.Sprintf("%s:%s", cfg.Host, cfg.Port))
builder.WriteString(")/")
builder.WriteString(cfg.DBName)
builder.WriteString("?timeout=")
builder.WriteString(cfg.Timeout.String())
builder.WriteString("&readTimeout=")
builder.WriteString(cfg.ReadTimeout.String())
builder.WriteString("&writeTimeout=")
builder.WriteString(cfg.WriteTimeout.String())
builder.WriteString("&interpolateParams=")
builder.WriteString(strconv.FormatBool(cfg.InterpolateParams))
if cfg.Charset != "" {
builder.WriteString("&charset=")
builder.WriteString(cfg.Charset)
}
builder.WriteString("&parseTime=")
builder.WriteString(strconv.FormatBool(cfg.ParseTime))
if cfg.Collation != "" {
builder.WriteString("&collation=")
builder.WriteString(cfg.Collation)
}
if cfg.Timezone != "" {
builder.WriteString("&loc=")
builder.WriteString(url.QueryEscape(cfg.Timezone))
}
dsn := builder.String()
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, err
}
db.SetConnMaxLifetime(cfg.ConnMaxLifetime)
db.SetMaxOpenConns(cfg.MaxOpenConns)
db.SetMaxIdleConns(cfg.MaxIdleConns)
return db, nil
}
================================================
FILE: internal/generator/chunks/mysqlchunk/chunk.go
================================================
package mysqlchunk
import (
_ "embed"
"github.com/hanagantig/goro/internal/config"
)
//go:embed build.tpl
var buildTmpl string
const name = "mysql"
const initName = "mysqlConn"
const initType = "*sql.DB"
const initHasErr = true
func NewMySQLChunk() config.Chunk {
return config.Chunk{
Name: name,
Scope: "storage.database.mysql",
ArgName: "mysqlConnect",
ReturnType: "*sql.DB",
DefinitionImports: "\"database/sql\"",
BuildImports: "_ \"github.com/go-sql-driver/mysql\"\n\"database/sql\"\n\"net/url\"\n\"strconv\"\n\"strings\"",
InitFunc: "newMySQLConnect",
Build: buildTmpl,
Configs: "mysql configs",
InitConfig: "cfg.MainDB",
InitHasErr: true,
}
}
================================================
FILE: internal/generator/chunks/mysqlxchunk/build.tpl
================================================
func (a *App) newMySQLxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {
builder := strings.Builder{}
builder.WriteString(cfg.User)
builder.WriteByte(':')
builder.WriteString(cfg.Password)
builder.WriteString("@tcp(")
builder.WriteString(fmt.Sprintf("%s:%s", cfg.Host, cfg.Port))
builder.WriteString(")/")
builder.WriteString(cfg.DBName)
builder.WriteString("?timeout=")
builder.WriteString(cfg.Timeout.String())
builder.WriteString("&readTimeout=")
builder.WriteString(cfg.ReadTimeout.String())
builder.WriteString("&writeTimeout=")
builder.WriteString(cfg.WriteTimeout.String())
builder.WriteString("&interpolateParams=")
builder.WriteString(strconv.FormatBool(cfg.InterpolateParams))
if cfg.Charset != "" {
builder.WriteString("&charset=")
builder.WriteString(cfg.Charset)
}
builder.WriteString("&parseTime=")
builder.WriteString(strconv.FormatBool(cfg.ParseTime))
if cfg.Collation != "" {
builder.WriteString("&collation=")
builder.WriteString(cfg.Collation)
}
if cfg.Timezone != "" {
builder.WriteString("&loc=")
builder.WriteString(url.QueryEscape(cfg.Timezone))
}
dsn := builder.String()
db, err := sqlx.Open("mysql", dsn)
if err != nil {
return nil, err
}
db.SetConnMaxLifetime(cfg.ConnMaxLifetime)
db.SetMaxOpenConns(cfg.MaxOpenConns)
db.SetMaxIdleConns(cfg.MaxIdleConns)
return db, nil
}
================================================
FILE: internal/generator/chunks/mysqlxchunk/chunk.go
================================================
package mysqlxchunk
import (
_ "embed"
"github.com/hanagantig/goro/internal/config"
)
//go:embed build.tpl
var buildTmpl string
const name = "mysqlx"
const initName = "mysqlxConn"
func NewMySQLxChunk() config.Chunk {
return config.Chunk{
Name: name,
Scope: "storage.database.mysqlx",
ArgName: initName,
ReturnType: "*sqlx.DB",
DefinitionImports: "\"github.com/jmoiron/sqlx\"",
BuildImports: "_ \"github.com/go-sql-driver/mysql\"\n\"github.com/jmoiron/sqlx\"\n\"net/url\"\n\"strconv\"\n\"strings\"",
InitFunc: "newMySQLxConnect",
Build: buildTmpl,
Configs: "mysqlx configs",
InitConfig: "cfg.MainDB",
InitHasErr: true,
}
}
================================================
FILE: internal/generator/chunks/pgsqlxchunk/build.tpl
================================================
func (a *App) newPgSqlxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {
builder := strings.Builder{}
builder.WriteString(fmt.Sprintf("host=%s port=%s ", cfg.Host, cfg.Port))
builder.WriteString(fmt.Sprintf("user=%s password=%s ", cfg.User, cfg.Password))
builder.WriteString(fmt.Sprintf("dbname=%s ", cfg.DBName))
builder.WriteString(fmt.Sprintf("timezone=%s ", cfg.Timezone))
builder.WriteString("sslmode=disable ")
params := builder.String()
db, err := sqlx.Open("postgres", params)
if err != nil {
return nil, err
}
db.SetConnMaxLifetime(cfg.ConnMaxLifetime)
db.SetMaxOpenConns(cfg.MaxOpenConns)
db.SetMaxIdleConns(cfg.MaxIdleConns)
return db, err
}
================================================
FILE: internal/generator/chunks/pgsqlxchunk/chunk.go
================================================
package pgsqlxchunk
import (
_ "embed"
"github.com/hanagantig/goro/internal/config"
)
//go:embed build.tpl
var buildTmpl string
const name = "pgsqlx"
const initName = "pgSqlxConn"
func NewPostgresChunk() config.Chunk {
return config.Chunk{
Name: name,
Scope: "storage.database.pgsqlx",
ArgName: initName,
ReturnType: "*sqlx.DB",
DefinitionImports: "\"github.com/jmoiron/sqlx\"",
BuildImports: "_ \"github.com/lib/pq\"\n\"github.com/jmoiron/sqlx\"\n\"strings\"",
InitFunc: "newPgSqlxConnect",
Build: buildTmpl,
Configs: "pgSqlx configs",
InitConfig: "cfg.MainDB",
InitHasErr: true,
}
}
================================================
FILE: internal/generator/chunks.go
================================================
package generator
import (
"github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/internal/generator/chunks/httpchunk"
"github.com/hanagantig/goro/internal/generator/chunks/mysqlchunk"
"github.com/hanagantig/goro/internal/generator/chunks/mysqlxchunk"
"github.com/hanagantig/goro/internal/generator/chunks/pgsqlxchunk"
)
var supportedChunks = map[string]config.Chunk{
"mysql": mysqlchunk.NewMySQLChunk(),
"mysqlx": mysqlxchunk.NewMySQLxChunk(),
"pgsqlx": pgsqlxchunk.NewPostgresChunk(),
"http": httpchunk.NewHttpChunk(),
}
================================================
FILE: internal/generator/error.go
================================================
package generator
import "errors"
var UnsupportedChunkErr = errors.New("unsupported chunk")
================================================
FILE: internal/generator/generator.go
================================================
package generator
import (
"fmt"
entity "github.com/hanagantig/goro/internal/config"
"github.com/hanagantig/goro/pkg/afero"
"io/fs"
"os"
"sync"
)
type Chain interface {
Name() string
Apply(fs *afero.Afero, data entity.Config) (*afero.Afero, error)
Rollback() error
}
type Generator struct {
mu sync.RWMutex
config entity.Config
chains []Chain
skeleton skeleton
}
func NewGenerator(config entity.Config) *Generator {
return &Generator{
chains: make([]Chain, 0),
skeleton: singleServiceSkeleton,
config: config,
}
}
func (g *Generator) AddChain(ch Chain) {
g.mu.Lock()
defer g.mu.Unlock()
g.chains = append(g.chains, ch)
}
func (g *Generator) getTemplateFS() (*afero.Afero, error) {
mfs := afero.NewMemMapFs()
afs := &afero.Afero{Fs: mfs}
err := fs.WalkDir(g.skeleton.template, g.skeleton.root,
func(path string, d fs.DirEntry, err error) error {
savePath := path[len(g.skeleton.root):]
if savePath == "" {
return nil
}
if d.IsDir() {
err = afs.MkdirAll(savePath, os.FileMode(0775))
if err != nil {
return err
}
return nil
}
content, err := g.skeleton.template.ReadFile(path)
if err != nil {
return err
}
err = afs.WriteFile(savePath, content, os.FileMode(0775))
if err != nil {
return err
}
return nil
},
)
return afs, err
}
func (g *Generator) loadChunks() error {
for _, name := range g.config.Storages {
ch, ok := supportedChunks[name.String()]
if !ok {
return fmt.Errorf("%w: %v", UnsupportedChunkErr, name)
}
g.config.Chunks = append(g.config.Chunks, ch)
}
return nil
}
func (g *Generator) Generate() error {
fs, err := g.getTemplateFS()
if err != nil {
return err
}
err = g.loadChunks()
if err != nil {
return err
}
for k, ch := range g.chains {
fmt.Printf("chain #%d: %s \n", k+1, ch.Name())
fs, err = ch.Apply(fs, g.config)
if err != nil {
fmt.Printf("%s fail: %v", ch.Name(), err)
_ = ch.Rollback()
return err
}
}
return nil
}
================================================
FILE: internal/generator/option.go
================================================
package generator
type Option func(generator *Generator)
//func WithSkeleton(name string) Option {
// return func(g *Generator) {
// g.skeleton = appTmplFs
// }
//}
//
//func WithStorages(storages config.StorageList) Option {
// return func(g *Generator) {
// g.skeleton = appTmplFs
// }
//}
================================================
FILE: internal/generator/renderer.go
================================================
package generator
import (
"fmt"
"strings"
"text/template"
"github.com/iancoleman/strcase"
entity "github.com/hanagantig/goro/internal/config"
)
var FuncMap = template.FuncMap{
"renderImports": RenderImports,
"renderDefinition": RenderDefinitions,
"renderInitializationsWithError": RenderInitializationsWithError,
"renderInitializationsWithoutError": RenderInitializationsWithoutError,
"renderStructPopulation": RenderStructPopulation,
"renderArgs": RenderArgs,
"renderBuild": RenderBuild,
"toCamelCase": strcase.ToCamel,
"toPrivateName": ToPrivateName,
"toPublicName": ToPublicName,
"contains": strings.Contains,
}
func RenderImports(scope, stage string, cfg entity.Config) string {
chunks := cfg.GetChunksByScope(scope)
res := strings.Builder{}
for _, ch := range chunks {
switch stage {
case "build":
fmt.Fprintf(&res, "%v\n", ch.BuildImports)
case "definition":
fmt.Fprintf(&res, "%v\n", ch.DefinitionImports)
default:
fmt.Fprintf(&res, "%v\n", ch.DefinitionImports)
}
}
return res.String()
}
func RenderDefinitions(scope string, cfg entity.Config) string {
chunks := cfg.GetChunksByScope(scope)
res := strings.Builder{}
for _, ch := range chunks {
fmt.Fprintf(&res, "%v %v\n", ch.Name, ch.ReturnType)
}
return res.String()
}
func RenderInitializationsWithError(scope, prefix string, cfg entity.Config) string {
chunks := cfg.GetChunksByScopeAndInitHasErr(scope)
res := strings.Builder{}
for _, ch := range chunks {
fmt.Fprintf(&res, "%v,%v := %v.%v(%v)\n", ch.ArgName, "err", prefix, ch.InitFunc, ch.InitConfig)
fmt.Fprintf(&res, "if err != nil {\n return nil, err\n}\n")
fmt.Fprintf(&res, "%v.%v = %v\n", prefix, ch.Name, ch.ArgName)
}
return res.String()
}
func RenderInitializationsWithoutError(scope, prefix string, cfg entity.Config) string {
chunks := cfg.GetChunksByScopeAndInitHasNotErr(scope)
res := strings.Builder{}
for _, ch := range chunks {
fmt.Fprintf(&res, "%v := %v.%v(%v)\n", ch.ArgName, prefix, ch.InitFunc, ch.InitConfig)
fmt.Fprintf(&res, "%v.%v = %v\n", prefix, ch.Name, ch.ArgName)
}
return res.String()
}
func RenderDependency(scope, prefix string, cfg entity.Config) string {
return "// render dependencies code"
}
func RenderBuild(scope string, cfg entity.Config) string {
chunks := cfg.GetChunksByScope(scope)
res := strings.Builder{}
for _, ch := range chunks {
fmt.Fprintf(&res, "%v\n\n", ch.Build)
}
return res.String()
}
func RenderArgs(scope string, cfg entity.Config) string {
chunks := cfg.GetChunksByScope(scope)
res := strings.Builder{}
for _, ch := range chunks {
fmt.Fprintf(&res, "%v %v,", ch.ArgName, ch.ReturnType)
}
return res.String()
}
func RenderStructPopulation(scope string, cfg entity.Config) string {
chunks := cfg.GetChunksByScope(scope)
res := strings.Builder{}
for _, ch := range chunks {
fmt.Fprintf(&res, "%v: %v,\n", ch.Name, ch.ArgName)
}
return res.String()
}
func ToPrivateName(name string) string {
return strings.ToLower(string(name[0])) + name[1:]
}
func ToPublicName(name string) string {
return strings.ToUpper(string(name[0])) + name[1:]
}
================================================
FILE: internal/generator/skeleton.go
================================================
package generator
import "embed"
//go:embed templates/app
var singleServiceTpl embed.FS
var singleServiceSkeleton = skeleton{
root: "templates/app",
template: singleServiceTpl,
}
//var skeletons = map[string]skeleton{
// "default": singleServiceSkeleton,
//}
type skeleton struct {
root string
template embed.FS
}
================================================
FILE: internal/generator/templates/app/cmd/http.go.tmpl
================================================
package cmd
import (
"github.com/spf13/cobra"
"{{ .App.Module }}/internal/app"
)
func RunHTTP() *cobra.Command {
cmd := &cobra.Command{
Use: "http",
Short: "Run http server",
}
cmd.RunE = func(cmd *cobra.Command, args []string) error {
a, err := app.GetGlobalApp()
if err != nil {
return err
}
if err := a.StartHTTPServer(); err != nil {
return err
gitextract_k_fsvlv8/
├── .github/
│ └── workflows/
│ └── go.yaml
├── .gitignore
├── LICENSE
├── README.md
├── cmd/
│ ├── init.go
│ ├── root.go
│ └── update.go
├── example/
│ └── testapp/
│ ├── cmd/
│ │ └── http.go
│ ├── config/
│ │ └── app.conf.yaml
│ ├── go.mod
│ ├── go.sum
│ ├── goro.yaml
│ ├── internal/
│ │ ├── adapter/
│ │ │ ├── httprepo/
│ │ │ │ └── ordersrepo/
│ │ │ │ ├── get_by_id.go
│ │ │ │ └── repository.go
│ │ │ ├── mysqlrepo/
│ │ │ │ ├── myrepo/
│ │ │ │ │ ├── get_all.go
│ │ │ │ │ ├── get_one.go
│ │ │ │ │ ├── repository.go
│ │ │ │ │ └── save.go
│ │ │ │ └── transactor.go
│ │ │ ├── mysqlxrepo/
│ │ │ │ ├── clientrepo/
│ │ │ │ │ ├── get_by_id.go
│ │ │ │ │ ├── git_by_date.go
│ │ │ │ │ └── repository.go
│ │ │ │ └── transactor.go
│ │ │ └── pgsqlxrepo/
│ │ │ ├── transactor.go
│ │ │ └── userrepo/
│ │ │ ├── get_by_id.go
│ │ │ └── repository.go
│ │ ├── app/
│ │ │ ├── app.go
│ │ │ ├── container.go
│ │ │ ├── database.go
│ │ │ ├── http.go
│ │ │ └── logger.go
│ │ ├── config/
│ │ │ └── config.go
│ │ ├── handler/
│ │ │ └── http/
│ │ │ ├── api/
│ │ │ │ └── v1/
│ │ │ │ ├── handler.go
│ │ │ │ ├── pong.go
│ │ │ │ └── router.go
│ │ │ ├── http.go
│ │ │ └── router.go
│ │ ├── service/
│ │ │ ├── myservice/
│ │ │ │ ├── get_by_filter.go
│ │ │ │ ├── get_list.go
│ │ │ │ └── service.go
│ │ │ ├── orderservice/
│ │ │ │ ├── get_by_id.go
│ │ │ │ └── service.go
│ │ │ ├── pingpong/
│ │ │ │ ├── pong.go
│ │ │ │ └── service.go
│ │ │ └── transactor.go
│ │ └── usecase/
│ │ ├── get_clients.go
│ │ ├── pong.go
│ │ ├── sign_in.go
│ │ ├── sign_up.go
│ │ └── usecase.go
│ ├── main.go
│ └── pkg/
│ ├── logger/
│ │ └── logger.go
│ └── middleware/
│ ├── acces_log_test.go
│ ├── access_log.go
│ ├── authorization.go
│ ├── context.go
│ ├── context_test.go
│ └── response_writer_wrapper.go
├── go.mod
├── go.sum
├── internal/
│ ├── commands/
│ │ ├── init_app.go
│ │ └── update_app.go
│ ├── config/
│ │ ├── adapter.go
│ │ ├── data.go
│ │ ├── service.go
│ │ ├── storage.go
│ │ ├── usecase.go
│ │ └── validate.go
│ ├── generator/
│ │ ├── chains/
│ │ │ ├── fit_file_extention.go
│ │ │ ├── fit_file_name.go
│ │ │ ├── generate_adapters.go
│ │ │ ├── generate_code.go
│ │ │ ├── generate_services.go
│ │ │ ├── generate_usecase.go
│ │ │ ├── mod_init.go
│ │ │ ├── mod_tidy.go
│ │ │ ├── save_files.go
│ │ │ ├── sync_adapters.go
│ │ │ ├── sync_services.go
│ │ │ ├── sync_usecases.go
│ │ │ └── update_files.go
│ │ ├── chunks/
│ │ │ ├── httpchunk/
│ │ │ │ ├── build.tpl
│ │ │ │ └── chunk.go
│ │ │ ├── mysqlchunk/
│ │ │ │ ├── build.tpl
│ │ │ │ └── chunk.go
│ │ │ ├── mysqlxchunk/
│ │ │ │ ├── build.tpl
│ │ │ │ └── chunk.go
│ │ │ └── pgsqlxchunk/
│ │ │ ├── build.tpl
│ │ │ └── chunk.go
│ │ ├── chunks.go
│ │ ├── error.go
│ │ ├── generator.go
│ │ ├── option.go
│ │ ├── renderer.go
│ │ ├── skeleton.go
│ │ └── templates/
│ │ └── app/
│ │ ├── cmd/
│ │ │ └── http.go.tmpl
│ │ ├── config/
│ │ │ └── app.conf.yaml
│ │ ├── internal/
│ │ │ ├── adapter/
│ │ │ │ ├── method.go.tmpl
│ │ │ │ ├── repository.go.tmpl
│ │ │ │ └── sql_transactor.go.tmpl
│ │ │ ├── app/
│ │ │ │ ├── app.go.tmpl
│ │ │ │ ├── container.go.tmpl
│ │ │ │ ├── database.go.tmpl
│ │ │ │ ├── http.go.tmpl
│ │ │ │ └── logger.go.tmpl
│ │ │ ├── config/
│ │ │ │ └── config.go.tmpl
│ │ │ ├── handler/
│ │ │ │ └── http/
│ │ │ │ ├── api/
│ │ │ │ │ └── v1/
│ │ │ │ │ ├── handler.go.tmpl
│ │ │ │ │ ├── pong.go.tmpl
│ │ │ │ │ └── router.go.tmpl
│ │ │ │ ├── http.go.tmpl
│ │ │ │ └── router.go.tmpl
│ │ │ ├── service/
│ │ │ │ ├── method.go.tmpl
│ │ │ │ ├── service.go.tmpl
│ │ │ │ └── transactor.go.tmpl
│ │ │ └── usecase/
│ │ │ ├── method.go.tmpl
│ │ │ └── usecase.go.tmpl
│ │ ├── main.go.tmpl
│ │ └── pkg/
│ │ ├── logger/
│ │ │ └── logger.go.tmpl
│ │ └── middleware/
│ │ ├── acces_log_test.go.tmpl
│ │ ├── access_log.go.tmpl
│ │ ├── authorization.go.tmpl
│ │ ├── context.go.tmpl
│ │ ├── context_test.go.tmpl
│ │ └── response_writer_wrapper.go.tmpl
│ ├── pkg/
│ │ └── log/
│ │ └── log.go
│ └── prompt/
│ └── prompt.go
├── main.go
├── pkg/
│ └── afero/
│ ├── .gitignore
│ ├── .travis.yml
│ ├── LICENSE.txt
│ ├── README.md
│ ├── afero.go
│ ├── appveyor.yml
│ ├── basepath.go
│ ├── cacheOnReadFs.go
│ ├── const_bsds.go
│ ├── const_win_unix.go
│ ├── copyOnWriteFs.go
│ ├── httpFs.go
│ ├── iofs.go
│ ├── ioutil.go
│ ├── lstater.go
│ ├── match.go
│ ├── mem/
│ │ ├── dir.go
│ │ ├── dirmap.go
│ │ └── file.go
│ ├── memmap.go
│ ├── os.go
│ ├── path.go
│ ├── readonlyfs.go
│ ├── regexpfs.go
│ ├── symlink.go
│ ├── unionFile.go
│ └── util.go
└── vendor/
├── github.com/
│ ├── chzyer/
│ │ └── readline/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── ansi_windows.go
│ │ ├── complete.go
│ │ ├── complete_helper.go
│ │ ├── complete_segment.go
│ │ ├── history.go
│ │ ├── operation.go
│ │ ├── password.go
│ │ ├── rawreader_windows.go
│ │ ├── readline.go
│ │ ├── remote.go
│ │ ├── runebuf.go
│ │ ├── runes.go
│ │ ├── search.go
│ │ ├── std.go
│ │ ├── std_windows.go
│ │ ├── term.go
│ │ ├── term_bsd.go
│ │ ├── term_linux.go
│ │ ├── term_solaris.go
│ │ ├── term_unix.go
│ │ ├── term_windows.go
│ │ ├── terminal.go
│ │ ├── utils.go
│ │ ├── utils_unix.go
│ │ ├── utils_windows.go
│ │ ├── vim.go
│ │ └── windows_api.go
│ ├── fatih/
│ │ └── color/
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── color.go
│ │ └── doc.go
│ ├── iancoleman/
│ │ └── strcase/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── acronyms.go
│ │ ├── camel.go
│ │ ├── doc.go
│ │ └── snake.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── mattn/
│ │ ├── go-colorable/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── colorable_appengine.go
│ │ │ ├── colorable_others.go
│ │ │ ├── colorable_windows.go
│ │ │ ├── go.test.sh
│ │ │ └── noncolorable.go
│ │ └── go-isatty/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── go.test.sh
│ │ ├── isatty_bsd.go
│ │ ├── isatty_others.go
│ │ ├── isatty_plan9.go
│ │ ├── isatty_solaris.go
│ │ ├── isatty_tcgets.go
│ │ └── isatty_windows.go
│ └── spf13/
│ ├── cobra/
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .mailmap
│ │ ├── CHANGELOG.md
│ │ ├── CONDUCT.md
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE.txt
│ │ ├── MAINTAINERS
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── args.go
│ │ ├── bash_completions.go
│ │ ├── bash_completions.md
│ │ ├── bash_completionsV2.go
│ │ ├── cobra.go
│ │ ├── command.go
│ │ ├── command_notwin.go
│ │ ├── command_win.go
│ │ ├── completions.go
│ │ ├── fish_completions.go
│ │ ├── fish_completions.md
│ │ ├── powershell_completions.go
│ │ ├── powershell_completions.md
│ │ ├── projects_using_cobra.md
│ │ ├── shell_completions.go
│ │ ├── shell_completions.md
│ │ ├── user_guide.md
│ │ ├── zsh_completions.go
│ │ └── zsh_completions.md
│ └── pflag/
│ ├── .gitignore
│ ├── .travis.yml
│ ├── LICENSE
│ ├── README.md
│ ├── bool.go
│ ├── bool_slice.go
│ ├── bytes.go
│ ├── count.go
│ ├── duration.go
│ ├── duration_slice.go
│ ├── flag.go
│ ├── float32.go
│ ├── float32_slice.go
│ ├── float64.go
│ ├── float64_slice.go
│ ├── golangflag.go
│ ├── int.go
│ ├── int16.go
│ ├── int32.go
│ ├── int32_slice.go
│ ├── int64.go
│ ├── int64_slice.go
│ ├── int8.go
│ ├── int_slice.go
│ ├── ip.go
│ ├── ip_slice.go
│ ├── ipmask.go
│ ├── ipnet.go
│ ├── string.go
│ ├── string_array.go
│ ├── string_slice.go
│ ├── string_to_int.go
│ ├── string_to_int64.go
│ ├── string_to_string.go
│ ├── uint.go
│ ├── uint16.go
│ ├── uint32.go
│ ├── uint64.go
│ ├── uint8.go
│ └── uint_slice.go
├── golang.org/
│ └── x/
│ ├── sys/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── internal/
│ │ │ └── unsafeheader/
│ │ │ └── unsafeheader.go
│ │ └── unix/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── affinity_linux.go
│ │ ├── aliases.go
│ │ ├── asm_aix_ppc64.s
│ │ ├── asm_bsd_386.s
│ │ ├── asm_bsd_amd64.s
│ │ ├── asm_bsd_arm.s
│ │ ├── asm_bsd_arm64.s
│ │ ├── asm_linux_386.s
│ │ ├── asm_linux_amd64.s
│ │ ├── asm_linux_arm.s
│ │ ├── asm_linux_arm64.s
│ │ ├── asm_linux_mips64x.s
│ │ ├── asm_linux_mipsx.s
│ │ ├── asm_linux_ppc64x.s
│ │ ├── asm_linux_riscv64.s
│ │ ├── asm_linux_s390x.s
│ │ ├── asm_openbsd_mips64.s
│ │ ├── asm_solaris_amd64.s
│ │ ├── asm_zos_s390x.s
│ │ ├── bluetooth_linux.go
│ │ ├── cap_freebsd.go
│ │ ├── constants.go
│ │ ├── dev_aix_ppc.go
│ │ ├── dev_aix_ppc64.go
│ │ ├── dev_darwin.go
│ │ ├── dev_dragonfly.go
│ │ ├── dev_freebsd.go
│ │ ├── dev_linux.go
│ │ ├── dev_netbsd.go
│ │ ├── dev_openbsd.go
│ │ ├── dev_zos.go
│ │ ├── dirent.go
│ │ ├── endian_big.go
│ │ ├── endian_little.go
│ │ ├── env_unix.go
│ │ ├── epoll_zos.go
│ │ ├── errors_freebsd_386.go
│ │ ├── errors_freebsd_amd64.go
│ │ ├── errors_freebsd_arm.go
│ │ ├── errors_freebsd_arm64.go
│ │ ├── fcntl.go
│ │ ├── fcntl_darwin.go
│ │ ├── fcntl_linux_32bit.go
│ │ ├── fdset.go
│ │ ├── fstatfs_zos.go
│ │ ├── gccgo.go
│ │ ├── gccgo_c.c
│ │ ├── gccgo_linux_amd64.go
│ │ ├── ioctl.go
│ │ ├── ioctl_linux.go
│ │ ├── ioctl_zos.go
│ │ ├── mkall.sh
│ │ ├── mkerrors.sh
│ │ ├── pagesize_unix.go
│ │ ├── pledge_openbsd.go
│ │ ├── ptrace_darwin.go
│ │ ├── ptrace_ios.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── readdirent_getdents.go
│ │ ├── readdirent_getdirentries.go
│ │ ├── sockcmsg_dragonfly.go
│ │ ├── sockcmsg_linux.go
│ │ ├── sockcmsg_unix.go
│ │ ├── sockcmsg_unix_other.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_aix.go
│ │ ├── syscall_aix_ppc.go
│ │ ├── syscall_aix_ppc64.go
│ │ ├── syscall_bsd.go
│ │ ├── syscall_darwin.1_12.go
│ │ ├── syscall_darwin.1_13.go
│ │ ├── syscall_darwin.go
│ │ ├── syscall_darwin_amd64.go
│ │ ├── syscall_darwin_arm64.go
│ │ ├── syscall_darwin_libSystem.go
│ │ ├── syscall_dragonfly.go
│ │ ├── syscall_dragonfly_amd64.go
│ │ ├── syscall_freebsd.go
│ │ ├── syscall_freebsd_386.go
│ │ ├── syscall_freebsd_amd64.go
│ │ ├── syscall_freebsd_arm.go
│ │ ├── syscall_freebsd_arm64.go
│ │ ├── syscall_illumos.go
│ │ ├── syscall_linux.go
│ │ ├── syscall_linux_386.go
│ │ ├── syscall_linux_amd64.go
│ │ ├── syscall_linux_amd64_gc.go
│ │ ├── syscall_linux_arm.go
│ │ ├── syscall_linux_arm64.go
│ │ ├── syscall_linux_gc.go
│ │ ├── syscall_linux_gc_386.go
│ │ ├── syscall_linux_gc_arm.go
│ │ ├── syscall_linux_gccgo_386.go
│ │ ├── syscall_linux_gccgo_arm.go
│ │ ├── syscall_linux_mips64x.go
│ │ ├── syscall_linux_mipsx.go
│ │ ├── syscall_linux_ppc.go
│ │ ├── syscall_linux_ppc64x.go
│ │ ├── syscall_linux_riscv64.go
│ │ ├── syscall_linux_s390x.go
│ │ ├── syscall_linux_sparc64.go
│ │ ├── syscall_netbsd.go
│ │ ├── syscall_netbsd_386.go
│ │ ├── syscall_netbsd_amd64.go
│ │ ├── syscall_netbsd_arm.go
│ │ ├── syscall_netbsd_arm64.go
│ │ ├── syscall_openbsd.go
│ │ ├── syscall_openbsd_386.go
│ │ ├── syscall_openbsd_amd64.go
│ │ ├── syscall_openbsd_arm.go
│ │ ├── syscall_openbsd_arm64.go
│ │ ├── syscall_openbsd_mips64.go
│ │ ├── syscall_solaris.go
│ │ ├── syscall_solaris_amd64.go
│ │ ├── syscall_unix.go
│ │ ├── syscall_unix_gc.go
│ │ ├── syscall_unix_gc_ppc64x.go
│ │ ├── syscall_zos_s390x.go
│ │ ├── timestruct.go
│ │ ├── unveil_openbsd.go
│ │ ├── xattr_bsd.go
│ │ ├── zerrors_aix_ppc.go
│ │ ├── zerrors_aix_ppc64.go
│ │ ├── zerrors_darwin_amd64.go
│ │ ├── zerrors_darwin_arm64.go
│ │ ├── zerrors_dragonfly_amd64.go
│ │ ├── zerrors_freebsd_386.go
│ │ ├── zerrors_freebsd_amd64.go
│ │ ├── zerrors_freebsd_arm.go
│ │ ├── zerrors_freebsd_arm64.go
│ │ ├── zerrors_linux.go
│ │ ├── zerrors_linux_386.go
│ │ ├── zerrors_linux_amd64.go
│ │ ├── zerrors_linux_arm.go
│ │ ├── zerrors_linux_arm64.go
│ │ ├── zerrors_linux_mips.go
│ │ ├── zerrors_linux_mips64.go
│ │ ├── zerrors_linux_mips64le.go
│ │ ├── zerrors_linux_mipsle.go
│ │ ├── zerrors_linux_ppc.go
│ │ ├── zerrors_linux_ppc64.go
│ │ ├── zerrors_linux_ppc64le.go
│ │ ├── zerrors_linux_riscv64.go
│ │ ├── zerrors_linux_s390x.go
│ │ ├── zerrors_linux_sparc64.go
│ │ ├── zerrors_netbsd_386.go
│ │ ├── zerrors_netbsd_amd64.go
│ │ ├── zerrors_netbsd_arm.go
│ │ ├── zerrors_netbsd_arm64.go
│ │ ├── zerrors_openbsd_386.go
│ │ ├── zerrors_openbsd_amd64.go
│ │ ├── zerrors_openbsd_arm.go
│ │ ├── zerrors_openbsd_arm64.go
│ │ ├── zerrors_openbsd_mips64.go
│ │ ├── zerrors_solaris_amd64.go
│ │ ├── zerrors_zos_s390x.go
│ │ ├── zptrace_armnn_linux.go
│ │ ├── zptrace_linux_arm64.go
│ │ ├── zptrace_mipsnn_linux.go
│ │ ├── zptrace_mipsnnle_linux.go
│ │ ├── zptrace_x86_linux.go
│ │ ├── zsyscall_aix_ppc.go
│ │ ├── zsyscall_aix_ppc64.go
│ │ ├── zsyscall_aix_ppc64_gc.go
│ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ ├── zsyscall_darwin_amd64.1_13.go
│ │ ├── zsyscall_darwin_amd64.1_13.s
│ │ ├── zsyscall_darwin_amd64.go
│ │ ├── zsyscall_darwin_amd64.s
│ │ ├── zsyscall_darwin_arm64.1_13.go
│ │ ├── zsyscall_darwin_arm64.1_13.s
│ │ ├── zsyscall_darwin_arm64.go
│ │ ├── zsyscall_darwin_arm64.s
│ │ ├── zsyscall_dragonfly_amd64.go
│ │ ├── zsyscall_freebsd_386.go
│ │ ├── zsyscall_freebsd_amd64.go
│ │ ├── zsyscall_freebsd_arm.go
│ │ ├── zsyscall_freebsd_arm64.go
│ │ ├── zsyscall_illumos_amd64.go
│ │ ├── zsyscall_linux.go
│ │ ├── zsyscall_linux_386.go
│ │ ├── zsyscall_linux_amd64.go
│ │ ├── zsyscall_linux_arm.go
│ │ ├── zsyscall_linux_arm64.go
│ │ ├── zsyscall_linux_mips.go
│ │ ├── zsyscall_linux_mips64.go
│ │ ├── zsyscall_linux_mips64le.go
│ │ ├── zsyscall_linux_mipsle.go
│ │ ├── zsyscall_linux_ppc.go
│ │ ├── zsyscall_linux_ppc64.go
│ │ ├── zsyscall_linux_ppc64le.go
│ │ ├── zsyscall_linux_riscv64.go
│ │ ├── zsyscall_linux_s390x.go
│ │ ├── zsyscall_linux_sparc64.go
│ │ ├── zsyscall_netbsd_386.go
│ │ ├── zsyscall_netbsd_amd64.go
│ │ ├── zsyscall_netbsd_arm.go
│ │ ├── zsyscall_netbsd_arm64.go
│ │ ├── zsyscall_openbsd_386.go
│ │ ├── zsyscall_openbsd_amd64.go
│ │ ├── zsyscall_openbsd_arm.go
│ │ ├── zsyscall_openbsd_arm64.go
│ │ ├── zsyscall_openbsd_mips64.go
│ │ ├── zsyscall_solaris_amd64.go
│ │ ├── zsyscall_zos_s390x.go
│ │ ├── zsysctl_openbsd_386.go
│ │ ├── zsysctl_openbsd_amd64.go
│ │ ├── zsysctl_openbsd_arm.go
│ │ ├── zsysctl_openbsd_arm64.go
│ │ ├── zsysctl_openbsd_mips64.go
│ │ ├── zsysnum_darwin_amd64.go
│ │ ├── zsysnum_darwin_arm64.go
│ │ ├── zsysnum_dragonfly_amd64.go
│ │ ├── zsysnum_freebsd_386.go
│ │ ├── zsysnum_freebsd_amd64.go
│ │ ├── zsysnum_freebsd_arm.go
│ │ ├── zsysnum_freebsd_arm64.go
│ │ ├── zsysnum_linux_386.go
│ │ ├── zsysnum_linux_amd64.go
│ │ ├── zsysnum_linux_arm.go
│ │ ├── zsysnum_linux_arm64.go
│ │ ├── zsysnum_linux_mips.go
│ │ ├── zsysnum_linux_mips64.go
│ │ ├── zsysnum_linux_mips64le.go
│ │ ├── zsysnum_linux_mipsle.go
│ │ ├── zsysnum_linux_ppc.go
│ │ ├── zsysnum_linux_ppc64.go
│ │ ├── zsysnum_linux_ppc64le.go
│ │ ├── zsysnum_linux_riscv64.go
│ │ ├── zsysnum_linux_s390x.go
│ │ ├── zsysnum_linux_sparc64.go
│ │ ├── zsysnum_netbsd_386.go
│ │ ├── zsysnum_netbsd_amd64.go
│ │ ├── zsysnum_netbsd_arm.go
│ │ ├── zsysnum_netbsd_arm64.go
│ │ ├── zsysnum_openbsd_386.go
│ │ ├── zsysnum_openbsd_amd64.go
│ │ ├── zsysnum_openbsd_arm.go
│ │ ├── zsysnum_openbsd_arm64.go
│ │ ├── zsysnum_openbsd_mips64.go
│ │ ├── zsysnum_zos_s390x.go
│ │ ├── ztypes_aix_ppc.go
│ │ ├── ztypes_aix_ppc64.go
│ │ ├── ztypes_darwin_amd64.go
│ │ ├── ztypes_darwin_arm64.go
│ │ ├── ztypes_dragonfly_amd64.go
│ │ ├── ztypes_freebsd_386.go
│ │ ├── ztypes_freebsd_amd64.go
│ │ ├── ztypes_freebsd_arm.go
│ │ ├── ztypes_freebsd_arm64.go
│ │ ├── ztypes_illumos_amd64.go
│ │ ├── ztypes_linux.go
│ │ ├── ztypes_linux_386.go
│ │ ├── ztypes_linux_amd64.go
│ │ ├── ztypes_linux_arm.go
│ │ ├── ztypes_linux_arm64.go
│ │ ├── ztypes_linux_mips.go
│ │ ├── ztypes_linux_mips64.go
│ │ ├── ztypes_linux_mips64le.go
│ │ ├── ztypes_linux_mipsle.go
│ │ ├── ztypes_linux_ppc.go
│ │ ├── ztypes_linux_ppc64.go
│ │ ├── ztypes_linux_ppc64le.go
│ │ ├── ztypes_linux_riscv64.go
│ │ ├── ztypes_linux_s390x.go
│ │ ├── ztypes_linux_sparc64.go
│ │ ├── ztypes_netbsd_386.go
│ │ ├── ztypes_netbsd_amd64.go
│ │ ├── ztypes_netbsd_arm.go
│ │ ├── ztypes_netbsd_arm64.go
│ │ ├── ztypes_openbsd_386.go
│ │ ├── ztypes_openbsd_amd64.go
│ │ ├── ztypes_openbsd_arm.go
│ │ ├── ztypes_openbsd_arm64.go
│ │ ├── ztypes_openbsd_mips64.go
│ │ ├── ztypes_solaris_amd64.go
│ │ └── ztypes_zos_s390x.go
│ └── text/
│ ├── AUTHORS
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── PATENTS
│ ├── transform/
│ │ └── transform.go
│ └── unicode/
│ └── norm/
│ ├── composition.go
│ ├── forminfo.go
│ ├── input.go
│ ├── iter.go
│ ├── normalize.go
│ ├── readwriter.go
│ ├── tables10.0.0.go
│ ├── tables11.0.0.go
│ ├── tables12.0.0.go
│ ├── tables13.0.0.go
│ ├── tables9.0.0.go
│ ├── transform.go
│ └── trie.go
├── gopkg.in/
│ └── yaml.v2/
│ ├── .travis.yml
│ ├── LICENSE
│ ├── LICENSE.libyaml
│ ├── NOTICE
│ ├── README.md
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
└── modules.txt
Showing preview only (5,578K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (71465 symbols across 476 files)
FILE: cmd/root.go
function Execute (line 18) | func Execute() {
function init (line 25) | func init() {
FILE: example/testapp/cmd/http.go
function RunHTTP (line 8) | func RunHTTP() *cobra.Command {
FILE: example/testapp/internal/adapter/httprepo/ordersrepo/get_by_id.go
method GetByID (line 7) | func (r *Repository) GetByID(ctx context.Context) {
FILE: example/testapp/internal/adapter/httprepo/ordersrepo/repository.go
type Repository (line 11) | type Repository struct
function NewRepository (line 15) | func NewRepository(client *http.Client) *Repository {
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/get_all.go
method GetAll (line 7) | func (r *Repository) GetAll(ctx context.Context) {
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/get_one.go
method GetOne (line 7) | func (r *Repository) GetOne(ctx context.Context) {
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/repository.go
type Repository (line 13) | type Repository struct
function NewRepository (line 17) | func NewRepository(conn *sql.DB) *Repository {
FILE: example/testapp/internal/adapter/mysqlrepo/myrepo/save.go
method Save (line 7) | func (r *Repository) Save(ctx context.Context) {
FILE: example/testapp/internal/adapter/mysqlrepo/transactor.go
type contextKey (line 11) | type contextKey
constant txKey (line 13) | txKey contextKey = "sql_tx"
constant txIDKey (line 14) | txIDKey contextKey = "tx_id"
type Transactor (line 16) | type Transactor struct
method NewTxContext (line 28) | func (t *Transactor) NewTxContext(ctx context.Context) context.Context {
method hasTxID (line 32) | func (t *Transactor) hasTxID(ctx context.Context) bool {
method InTransaction (line 37) | func (t *Transactor) InTransaction(ctx context.Context, txFunc func(ct...
method GetConn (line 51) | func (t *Transactor) GetConn(ctx context.Context) *sql.DB {
method RunTransaction (line 60) | func (t *Transactor) RunTransaction(ctx context.Context) error {
method reset (line 87) | func (t *Transactor) reset(ctx context.Context) {
function NewTransactor (line 21) | func NewTransactor(c *sql.DB) Transactor {
FILE: example/testapp/internal/adapter/mysqlxrepo/clientrepo/get_by_id.go
method GetByID (line 7) | func (r *Repository) GetByID(ctx context.Context) {
FILE: example/testapp/internal/adapter/mysqlxrepo/clientrepo/git_by_date.go
method GitByDate (line 7) | func (r *Repository) GitByDate(ctx context.Context) {
FILE: example/testapp/internal/adapter/mysqlxrepo/clientrepo/repository.go
type Repository (line 13) | type Repository struct
function NewRepository (line 17) | func NewRepository(conn *sqlx.DB) *Repository {
FILE: example/testapp/internal/adapter/mysqlxrepo/transactor.go
type contextKey (line 11) | type contextKey
constant txKey (line 13) | txKey contextKey = "sql_tx"
constant txIDKey (line 14) | txIDKey contextKey = "tx_id"
type Transactor (line 16) | type Transactor struct
method NewTxContext (line 28) | func (t *Transactor) NewTxContext(ctx context.Context) context.Context {
method hasTxID (line 32) | func (t *Transactor) hasTxID(ctx context.Context) bool {
method InTransaction (line 37) | func (t *Transactor) InTransaction(ctx context.Context, txFunc func(ct...
method GetConn (line 51) | func (t *Transactor) GetConn(ctx context.Context) *sqlx.DB {
method RunTransaction (line 60) | func (t *Transactor) RunTransaction(ctx context.Context) error {
method reset (line 87) | func (t *Transactor) reset(ctx context.Context) {
function NewTransactor (line 21) | func NewTransactor(c *sqlx.DB) Transactor {
FILE: example/testapp/internal/adapter/pgsqlxrepo/transactor.go
type contextKey (line 11) | type contextKey
constant txKey (line 13) | txKey contextKey = "sql_tx"
constant txIDKey (line 14) | txIDKey contextKey = "tx_id"
type Transactor (line 16) | type Transactor struct
method NewTxContext (line 28) | func (t *Transactor) NewTxContext(ctx context.Context) context.Context {
method hasTxID (line 32) | func (t *Transactor) hasTxID(ctx context.Context) bool {
method InTransaction (line 37) | func (t *Transactor) InTransaction(ctx context.Context, txFunc func(ct...
method GetConn (line 51) | func (t *Transactor) GetConn(ctx context.Context) *sqlx.DB {
method RunTransaction (line 60) | func (t *Transactor) RunTransaction(ctx context.Context) error {
method reset (line 87) | func (t *Transactor) reset(ctx context.Context) {
function NewTransactor (line 21) | func NewTransactor(c *sqlx.DB) Transactor {
FILE: example/testapp/internal/adapter/pgsqlxrepo/userrepo/get_by_id.go
method GetByID (line 7) | func (r *Repository) GetByID(ctx context.Context) {
FILE: example/testapp/internal/adapter/pgsqlxrepo/userrepo/repository.go
type Repository (line 13) | type Repository struct
function NewRepository (line 17) | func NewRepository(conn *sqlx.DB) *Repository {
FILE: example/testapp/internal/app/app.go
type Logger (line 19) | type Logger interface
type App (line 26) | type App struct
function NewApp (line 45) | func NewApp(configPath string) (*App, error) {
function SetGlobalApp (line 88) | func SetGlobalApp(app *App) {
function GetGlobalApp (line 92) | func GetGlobalApp() (*App, error) {
FILE: example/testapp/internal/app/container.go
type Container (line 25) | type Container struct
method GetUseCase (line 46) | func (c *Container) GetUseCase() *usecase.UseCase {
method getMysql (line 51) | func (c *Container) getMysql() *sql.DB {
method getMysqlx (line 55) | func (c *Container) getMysqlx() *sqlx.DB {
method getPgsqlx (line 59) | func (c *Container) getPgsqlx() *sqlx.DB {
method getHttp (line 63) | func (c *Container) getHttp() *http.Client {
method getMyService (line 67) | func (c *Container) getMyService() *myservice.Service {
method getPingPong (line 72) | func (c *Container) getPingPong() *pingpong.Service {
method getOrderService (line 77) | func (c *Container) getOrderService() *orderservice.Service {
method getMyRepo (line 82) | func (c *Container) getMyRepo() *myrepo.Repository {
method getClientRepo (line 87) | func (c *Container) getClientRepo() *clientrepo.Repository {
method getUserRepo (line 92) | func (c *Container) getUserRepo() *userrepo.Repository {
method getOrdersRepo (line 97) | func (c *Container) getOrdersRepo() *ordersrepo.Repository {
function NewContainer (line 34) | func NewContainer(mysqlConnect *sql.DB, mysqlxConn *sqlx.DB, pgSqlxConn ...
FILE: example/testapp/internal/app/database.go
method newMySQLConnect (line 20) | func (a *App) newMySQLConnect(cfg config.SQLConfig) (*sql.DB, error) {
method newMySQLxConnect (line 67) | func (a *App) newMySQLxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {
method newPgSqlxConnect (line 114) | func (a *App) newPgSqlxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {
FILE: example/testapp/internal/app/http.go
method StartHTTPServer (line 17) | func (a *App) StartHTTPServer() error {
method startHTTPServer (line 31) | func (a *App) startHTTPServer() {
method newHttpClient (line 56) | func (a *App) newHttpClient() *client.Client {
FILE: example/testapp/internal/app/logger.go
method initLogger (line 13) | func (a *App) initLogger() {
FILE: example/testapp/internal/config/config.go
type AppConfig (line 8) | type AppConfig struct
type HTTPConfig (line 14) | type HTTPConfig struct
type ThirdPartyService (line 21) | type ThirdPartyService struct
type SQLConfig (line 25) | type SQLConfig struct
type Config (line 44) | type Config struct
function NewConfig (line 55) | func NewConfig(filePath string) (Config, error) {
FILE: example/testapp/internal/handler/http/api/v1/handler.go
type UseCase (line 8) | type UseCase interface
type Handler (line 15) | type Handler struct
function NewHandler (line 20) | func NewHandler(uc UseCase, logs logger.Logger) *Handler {
FILE: example/testapp/internal/handler/http/api/v1/pong.go
method Ping (line 9) | func (h Handler) Ping(w http.ResponseWriter, r *http.Request) {
FILE: example/testapp/internal/handler/http/api/v1/router.go
method GetVersion (line 8) | func (h *Handler) GetVersion() string {
method GetContentType (line 12) | func (h *Handler) GetContentType() string {
method AddRoutes (line 16) | func (h *Handler) AddRoutes(r *mux.Router) {
FILE: example/testapp/internal/handler/http/http.go
type Server (line 10) | type Server struct
method RegisterRoutes (line 26) | func (s *Server) RegisterRoutes(r *Router) {
method Start (line 30) | func (s *Server) Start() error {
method Stop (line 42) | func (s *Server) Stop() error {
function NewServer (line 14) | func NewServer(cfg config.HTTPConfig) *Server {
FILE: example/testapp/internal/handler/http/router.go
type HandlerRouter (line 11) | type HandlerRouter interface
type Router (line 17) | type Router struct
method WithMetrics (line 25) | func (r *Router) WithMetrics() *Router {
method WithSwagger (line 32) | func (r *Router) WithSwagger() *Router {
method WithHandler (line 39) | func (r *Router) WithHandler(h HandlerRouter, logger logger.Logger) *R...
method WithProfiler (line 55) | func (r *Router) WithProfiler() *Router {
function NewRouter (line 21) | func NewRouter() *Router {
FILE: example/testapp/internal/service/myservice/get_by_filter.go
method GetByFilter (line 7) | func (s *Service) GetByFilter(ctx context.Context) {
FILE: example/testapp/internal/service/myservice/get_list.go
method GetList (line 7) | func (s *Service) GetList(ctx context.Context) {
FILE: example/testapp/internal/service/myservice/service.go
type myRepo (line 11) | type myRepo interface
type Service (line 16) | type Service struct
function NewService (line 20) | func NewService(myRepo myRepo) *Service {
FILE: example/testapp/internal/service/orderservice/get_by_id.go
method GetByID (line 7) | func (s *Service) GetByID(ctx context.Context) {
FILE: example/testapp/internal/service/orderservice/service.go
type ordersRepo (line 7) | type ordersRepo interface
type Service (line 11) | type Service struct
function NewService (line 15) | func NewService(ordersRepo ordersRepo) *Service {
FILE: example/testapp/internal/service/pingpong/pong.go
method Pong (line 7) | func (s *Service) Pong(ctx context.Context) {
FILE: example/testapp/internal/service/pingpong/service.go
type myRepo (line 11) | type myRepo interface
type Service (line 16) | type Service struct
function NewService (line 20) | func NewService(myRepo myRepo) *Service {
FILE: example/testapp/internal/service/transactor.go
type Transactor (line 7) | type Transactor interface
FILE: example/testapp/internal/usecase/get_clients.go
method GetClients (line 7) | func (u *UseCase) GetClients(ctx context.Context) (interface{}, error) {
FILE: example/testapp/internal/usecase/pong.go
method Pong (line 7) | func (u *UseCase) Pong(ctx context.Context) (interface{}, error) {
FILE: example/testapp/internal/usecase/sign_in.go
method SignIn (line 7) | func (u *UseCase) SignIn(ctx context.Context) (interface{}, error) {
FILE: example/testapp/internal/usecase/sign_up.go
method SignUp (line 7) | func (u *UseCase) SignUp(ctx context.Context) (interface{}, error) {
FILE: example/testapp/internal/usecase/usecase.go
type myService (line 7) | type myService interface
type pingPong (line 11) | type pingPong interface
type UseCase (line 15) | type UseCase struct
function NewUseCase (line 20) | func NewUseCase(myService myService, pingPong pingPong) *UseCase {
FILE: example/testapp/main.go
function initApp (line 21) | func initApp() {
function main (line 30) | func main() {
FILE: example/testapp/pkg/logger/logger.go
type Logger (line 8) | type Logger interface
function NewLogger (line 15) | func NewLogger() (*zap.Logger, error) {
FILE: example/testapp/pkg/middleware/acces_log_test.go
type panicHandler (line 15) | type panicHandler struct
method ServeHTTP (line 17) | func (t panicHandler) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {
type badRequestHandler (line 21) | type badRequestHandler struct
method ServeHTTP (line 23) | func (t badRequestHandler) ServeHTTP(w http.ResponseWriter, _ *http.Re...
function TestAccessLogMiddleware_BadRequest (line 28) | func TestAccessLogMiddleware_BadRequest(t *testing.T) {
function TestAccessLogMiddleware_PanicRecovery (line 57) | func TestAccessLogMiddleware_PanicRecovery(t *testing.T) {
function tNewLogger (line 87) | func tNewLogger(t *testing.T, sinkName string, sink zap.Sink) zlog.Logger {
type MemorySink (line 100) | type MemorySink struct
method Close (line 106) | func (s *MemorySink) Close() error { return nil }
method Sync (line 107) | func (s *MemorySink) Sync() error { return nil }
FILE: example/testapp/pkg/middleware/access_log.go
function AccessLogMiddleware (line 12) | func AccessLogMiddleware(log logger.Logger) func(next http.Handler) http...
FILE: example/testapp/pkg/middleware/authorization.go
function AuthorizationMiddleware (line 11) | func AuthorizationMiddleware() func(next http.Handler) http.Handler {
FILE: example/testapp/pkg/middleware/context.go
function AddContextMiddleware (line 9) | func AddContextMiddleware(log logger.Logger) func(next http.Handler) htt...
FILE: example/testapp/pkg/middleware/context_test.go
function TestContextMiddleware_RequestIDHeaderNotFound (line 12) | func TestContextMiddleware_RequestIDHeaderNotFound(t *testing.T) {
FILE: example/testapp/pkg/middleware/response_writer_wrapper.go
type responseWriterWrapper (line 11) | type responseWriterWrapper struct
method WriteHeader (line 26) | func (rw *responseWriterWrapper) WriteHeader(code int) {
method Write (line 32) | func (rw *responseWriterWrapper) Write(body []byte) (int, error) {
method Hijack (line 39) | func (rw *responseWriterWrapper) Hijack() (net.Conn, *bufio.ReadWriter...
method StatusCode (line 48) | func (rw *responseWriterWrapper) StatusCode() int {
method Body (line 53) | func (rw *responseWriterWrapper) Body() []byte {
function newResponseWriterWrapper (line 18) | func newResponseWriterWrapper(w http.ResponseWriter) *responseWriterWrap...
FILE: internal/commands/init_app.go
function InitApp (line 10) | func InitApp(configPath string) {
FILE: internal/commands/update_app.go
function UpdateApp (line 10) | func UpdateApp(configPath string) {
FILE: internal/config/adapter.go
type Adapter (line 7) | type Adapter struct
method GetPkgName (line 16) | func (a Adapter) GetPkgName() string {
method GetConstructorName (line 20) | func (a Adapter) GetConstructorName() string {
method IsTransactional (line 24) | func (a Adapter) IsTransactional() bool {
type Adapters (line 14) | type Adapters
method GetMap (line 28) | func (a Adapters) GetMap() map[string]struct{} {
method GetTransactionalMap (line 37) | func (a Adapters) GetTransactionalMap() map[string]bool {
FILE: internal/config/data.go
type DependencyName (line 13) | type DependencyName
type Config (line 15) | type Config struct
method AskAndSetName (line 84) | func (c *Config) AskAndSetName() error {
method askName (line 98) | func (c *Config) askName() (string, error) {
method AskAndSetWorkDir (line 110) | func (c *Config) AskAndSetWorkDir() error {
method askWorkDir (line 130) | func (c *Config) askWorkDir() (string, error) {
method GetChunksByScope (line 137) | func (c *Config) GetChunksByScope(scope string) []Chunk {
method GetChunksByScopeAndInitHasErr (line 148) | func (c *Config) GetChunksByScopeAndInitHasErr(scope string) []Chunk {
method GetChunksByScopeAndInitHasNotErr (line 159) | func (c *Config) GetChunksByScopeAndInitHasNotErr(scope string) []Chunk {
type Chunk (line 24) | type Chunk struct
type App (line 38) | type App struct
type Dependency (line 44) | type Dependency struct
method GetPackageName (line 52) | func (d Dependency) GetPackageName() string {
function NewConfig (line 61) | func NewConfig(pathToFile string) (Config, error) {
function LoadDataFromYaml (line 69) | func LoadDataFromYaml(pathToFile string) (Config, error) {
FILE: internal/config/service.go
type Service (line 7) | type Service struct
method GetConstructorName (line 16) | func (s Service) GetConstructorName() string {
method GetPkgName (line 20) | func (s Service) GetPkgName() string {
method CheckTransactionalDeps (line 24) | func (s Service) CheckTransactionalDeps(txAdapterMap map[string]bool) ...
method GetTransactionalDeps (line 35) | func (s Service) GetTransactionalDeps(txAdapterMap map[string]bool) []...
method GetNonTransactionalDeps (line 47) | func (s Service) GetNonTransactionalDeps(txAdapterMap map[string]bool)...
type Services (line 14) | type Services
method GetMap (line 59) | func (s Services) GetMap() map[string]struct{} {
FILE: internal/config/storage.go
type Storage (line 31) | type Storage
method String (line 43) | func (s Storage) String() string {
method GetFolderName (line 47) | func (s Storage) GetFolderName() string {
method GetConnImportName (line 51) | func (s Storage) GetConnImportName() string {
method GetConnectionType (line 55) | func (s Storage) GetConnectionType() string {
method GetConnectionName (line 59) | func (s Storage) GetConnectionName() string {
type Storages (line 32) | type Storages
method GetMap (line 34) | func (s Storages) GetMap() map[Storage]struct{} {
FILE: internal/config/usecase.go
type UseCase (line 3) | type UseCase struct
method GetConstructorName (line 8) | func (u UseCase) GetConstructorName() string {
FILE: internal/config/validate.go
method Validate (line 10) | func (c *Config) Validate() error {
FILE: internal/generator/chains/fit_file_extention.go
type fitFileExtensionChain (line 10) | type fitFileExtensionChain struct
method Apply (line 16) | func (f *fitFileExtensionChain) Apply(fs *afero.Afero, data entity.Con...
method Name (line 42) | func (f *fitFileExtensionChain) Name() string {
method Rollback (line 46) | func (f *fitFileExtensionChain) Rollback() error {
function NewFitFileExtensionChain (line 12) | func NewFitFileExtensionChain() *fitFileExtensionChain {
FILE: internal/generator/chains/fit_file_name.go
type fitFileNameChain (line 11) | type fitFileNameChain struct
method Apply (line 17) | func (f *fitFileNameChain) Apply(fs *afero.Afero, data entity.Config) ...
method Name (line 49) | func (f *fitFileNameChain) Name() string {
method Rollback (line 53) | func (f *fitFileNameChain) Rollback() error {
function NewFitFileNameChain (line 13) | func NewFitFileNameChain() *fitFileNameChain {
FILE: internal/generator/chains/generate_adapters.go
type generateAdapterChain (line 14) | type generateAdapterChain struct
method Apply (line 20) | func (g *generateAdapterChain) Apply(fs *afero.Afero, data entity.Conf...
method Name (line 121) | func (g *generateAdapterChain) Name() string {
method Rollback (line 125) | func (g *generateAdapterChain) Rollback() error {
function NewGenerateAdapterChain (line 16) | func NewGenerateAdapterChain() *generateAdapterChain {
FILE: internal/generator/chains/generate_code.go
type generateCodeChain (line 16) | type generateCodeChain struct
method Apply (line 37) | func (g *generateCodeChain) Apply(fs *afero.Afero, data entity.Config)...
method Name (line 78) | func (g *generateCodeChain) Name() string {
method Rollback (line 82) | func (g *generateCodeChain) Rollback() error {
function NewGenerateCodeChain (line 18) | func NewGenerateCodeChain() *generateCodeChain {
function generate (line 22) | func generate(path string, content []byte, data interface{}) ([]byte, er...
FILE: internal/generator/chains/generate_services.go
type generateServicesChain (line 12) | type generateServicesChain struct
method Apply (line 18) | func (g *generateServicesChain) Apply(fs *afero.Afero, data entity.Con...
method Name (line 101) | func (g *generateServicesChain) Name() string {
method Rollback (line 105) | func (g *generateServicesChain) Rollback() error {
function NewGenerateServicesChain (line 14) | func NewGenerateServicesChain() *generateServicesChain {
FILE: internal/generator/chains/generate_usecase.go
type generateUseCaseChain (line 9) | type generateUseCaseChain struct
method Apply (line 15) | func (g *generateUseCaseChain) Apply(fs *afero.Afero, data entity.Conf...
method Name (line 65) | func (g *generateUseCaseChain) Name() string {
method Rollback (line 69) | func (g *generateUseCaseChain) Rollback() error {
function NewGenerateUseCaseChain (line 11) | func NewGenerateUseCaseChain() *generateUseCaseChain {
FILE: internal/generator/chains/mod_init.go
type modInitChain (line 10) | type modInitChain struct
method Apply (line 16) | func (m *modInitChain) Apply(fs *afero.Afero, data entity.Config) (*af...
method Name (line 30) | func (m *modInitChain) Name() string {
method Rollback (line 34) | func (m *modInitChain) Rollback() error {
function NewModInitChain (line 12) | func NewModInitChain() *modInitChain {
FILE: internal/generator/chains/mod_tidy.go
type modTidyChain (line 10) | type modTidyChain struct
method Apply (line 16) | func (m *modTidyChain) Apply(fs *afero.Afero, data entity.Config) (*af...
method Name (line 29) | func (m *modTidyChain) Name() string {
method Rollback (line 33) | func (m *modTidyChain) Rollback() error {
function NewModTidyChain (line 12) | func NewModTidyChain() *modTidyChain {
FILE: internal/generator/chains/save_files.go
type saveFilesChain (line 10) | type saveFilesChain struct
method Apply (line 18) | func (g *saveFilesChain) Apply(fs *afero.Afero, data entity.Config) (*...
method Name (line 48) | func (g *saveFilesChain) Name() string {
method Rollback (line 52) | func (g *saveFilesChain) Rollback() error {
function NewSaveFilesChain (line 14) | func NewSaveFilesChain() *saveFilesChain {
FILE: internal/generator/chains/sync_adapters.go
type syncAdaptersChain (line 11) | type syncAdaptersChain struct
method Apply (line 19) | func (g *syncAdaptersChain) Apply(fs *afero.Afero, data entity.Config)...
method Name (line 54) | func (g *syncAdaptersChain) Name() string {
method Rollback (line 58) | func (g *syncAdaptersChain) Rollback() error {
function NewSyncAdaptersChain (line 15) | func NewSyncAdaptersChain() *syncAdaptersChain {
FILE: internal/generator/chains/sync_services.go
type syncServicesChain (line 11) | type syncServicesChain struct
method Apply (line 29) | func (g *syncServicesChain) Apply(fs *afero.Afero, data entity.Config)...
method Name (line 53) | func (g *syncServicesChain) Name() string {
method Rollback (line 57) | func (g *syncServicesChain) Rollback() error {
function NewSyncServicesChain (line 15) | func NewSyncServicesChain() *syncServicesChain {
function contains (line 19) | func contains(s []string, str string) bool {
FILE: internal/generator/chains/sync_usecases.go
type syncUseCaseChain (line 12) | type syncUseCaseChain struct
method Apply (line 20) | func (g *syncUseCaseChain) Apply(fs *afero.Afero, data entity.Config) ...
method Name (line 42) | func (g *syncUseCaseChain) Name() string {
method Rollback (line 46) | func (g *syncUseCaseChain) Rollback() error {
function NewSyncUseCaseChain (line 16) | func NewSyncUseCaseChain() *syncUseCaseChain {
FILE: internal/generator/chains/update_files.go
type updateFilesChain (line 11) | type updateFilesChain struct
method Apply (line 23) | func (g *updateFilesChain) Apply(fs *afero.Afero, data entity.Config) ...
method Name (line 63) | func (g *updateFilesChain) Name() string {
method Rollback (line 67) | func (g *updateFilesChain) Rollback() error {
function NewUpdateFilesChain (line 15) | func NewUpdateFilesChain() *updateFilesChain {
function isRegenerated (line 19) | func isRegenerated(name string) bool {
FILE: internal/generator/chunks/httpchunk/chunk.go
constant name (line 12) | name = "http"
constant initName (line 13) | initName = "httpClient"
function NewHttpChunk (line 15) | func NewHttpChunk() config.Chunk {
FILE: internal/generator/chunks/mysqlchunk/chunk.go
constant name (line 12) | name = "mysql"
constant initName (line 13) | initName = "mysqlConn"
constant initType (line 14) | initType = "*sql.DB"
constant initHasErr (line 15) | initHasErr = true
function NewMySQLChunk (line 17) | func NewMySQLChunk() config.Chunk {
FILE: internal/generator/chunks/mysqlxchunk/chunk.go
constant name (line 12) | name = "mysqlx"
constant initName (line 13) | initName = "mysqlxConn"
function NewMySQLxChunk (line 15) | func NewMySQLxChunk() config.Chunk {
FILE: internal/generator/chunks/pgsqlxchunk/chunk.go
constant name (line 12) | name = "pgsqlx"
constant initName (line 13) | initName = "pgSqlxConn"
function NewPostgresChunk (line 15) | func NewPostgresChunk() config.Chunk {
FILE: internal/generator/generator.go
type Chain (line 12) | type Chain interface
type Generator (line 18) | type Generator struct
method AddChain (line 33) | func (g *Generator) AddChain(ch Chain) {
method getTemplateFS (line 40) | func (g *Generator) getTemplateFS() (*afero.Afero, error) {
method loadChunks (line 76) | func (g *Generator) loadChunks() error {
method Generate (line 89) | func (g *Generator) Generate() error {
function NewGenerator (line 25) | func NewGenerator(config entity.Config) *Generator {
FILE: internal/generator/option.go
type Option (line 3) | type Option
FILE: internal/generator/renderer.go
function RenderImports (line 27) | func RenderImports(scope, stage string, cfg entity.Config) string {
function RenderDefinitions (line 44) | func RenderDefinitions(scope string, cfg entity.Config) string {
function RenderInitializationsWithError (line 54) | func RenderInitializationsWithError(scope, prefix string, cfg entity.Con...
function RenderInitializationsWithoutError (line 66) | func RenderInitializationsWithoutError(scope, prefix string, cfg entity....
function RenderDependency (line 77) | func RenderDependency(scope, prefix string, cfg entity.Config) string {
function RenderBuild (line 81) | func RenderBuild(scope string, cfg entity.Config) string {
function RenderArgs (line 91) | func RenderArgs(scope string, cfg entity.Config) string {
function RenderStructPopulation (line 101) | func RenderStructPopulation(scope string, cfg entity.Config) string {
function ToPrivateName (line 111) | func ToPrivateName(name string) string {
function ToPublicName (line 115) | func ToPublicName(name string) string {
FILE: internal/generator/skeleton.go
type skeleton (line 17) | type skeleton struct
FILE: internal/pkg/log/log.go
function Success (line 11) | func Success(message ...string) {
function Warn (line 16) | func Warn(message ...string) {
function Error (line 21) | func Error(message error) {
function Fatal (line 26) | func Fatal(message error) {
FILE: internal/prompt/prompt.go
function AskAppName (line 8) | func AskAppName() (string, error) {
FILE: main.go
function main (line 9) | func main() {
FILE: pkg/afero/afero.go
type Afero (line 32) | type Afero struct
type File (line 37) | type File interface
type Fs (line 57) | type Fs interface
FILE: pkg/afero/basepath.go
type BasePathFs (line 21) | type BasePathFs struct
method RealPath (line 42) | func (b *BasePathFs) RealPath(name string) (path string, err error) {
method Chtimes (line 72) | func (b *BasePathFs) Chtimes(name string, atime, mtime time.Time) (err...
method Chmod (line 79) | func (b *BasePathFs) Chmod(name string, mode os.FileMode) (err error) {
method Chown (line 86) | func (b *BasePathFs) Chown(name string, uid, gid int) (err error) {
method Name (line 93) | func (b *BasePathFs) Name() string {
method Stat (line 97) | func (b *BasePathFs) Stat(name string) (fi os.FileInfo, err error) {
method Rename (line 104) | func (b *BasePathFs) Rename(oldname, newname string) (err error) {
method RemoveAll (line 114) | func (b *BasePathFs) RemoveAll(name string) (err error) {
method Remove (line 121) | func (b *BasePathFs) Remove(name string) (err error) {
method OpenFile (line 128) | func (b *BasePathFs) OpenFile(name string, flag int, mode os.FileMode)...
method Open (line 139) | func (b *BasePathFs) Open(name string) (f File, err error) {
method Mkdir (line 150) | func (b *BasePathFs) Mkdir(name string, mode os.FileMode) (err error) {
method MkdirAll (line 157) | func (b *BasePathFs) MkdirAll(name string, mode os.FileMode) (err erro...
method Create (line 164) | func (b *BasePathFs) Create(name string) (f File, err error) {
method LstatIfPossible (line 175) | func (b *BasePathFs) LstatIfPossible(name string) (os.FileInfo, bool, ...
method SymlinkIfPossible (line 187) | func (b *BasePathFs) SymlinkIfPossible(oldname, newname string) error {
method ReadlinkIfPossible (line 202) | func (b *BasePathFs) ReadlinkIfPossible(name string) (string, error) {
type BasePathFile (line 26) | type BasePathFile struct
method Name (line 31) | func (f *BasePathFile) Name() string {
function NewBasePathFs (line 36) | func NewBasePathFs(source Fs, path string) Fs {
function validateBasePathName (line 56) | func validateBasePathName(name string) error {
FILE: pkg/afero/cacheOnReadFs.go
type CacheOnReadFs (line 22) | type CacheOnReadFs struct
method cacheStatus (line 48) | func (u *CacheOnReadFs) cacheStatus(name string) (state cacheState, fi...
method copyToLayer (line 74) | func (u *CacheOnReadFs) copyToLayer(name string) error {
method copyFileToLayer (line 78) | func (u *CacheOnReadFs) copyFileToLayer(name string, flag int, perm os...
method Chtimes (line 82) | func (u *CacheOnReadFs) Chtimes(name string, atime, mtime time.Time) e...
method Chmod (line 103) | func (u *CacheOnReadFs) Chmod(name string, mode os.FileMode) error {
method Chown (line 124) | func (u *CacheOnReadFs) Chown(name string, uid, gid int) error {
method Stat (line 145) | func (u *CacheOnReadFs) Stat(name string) (os.FileInfo, error) {
method Rename (line 158) | func (u *CacheOnReadFs) Rename(oldname, newname string) error {
method Remove (line 179) | func (u *CacheOnReadFs) Remove(name string) error {
method RemoveAll (line 195) | func (u *CacheOnReadFs) RemoveAll(name string) error {
method OpenFile (line 211) | func (u *CacheOnReadFs) OpenFile(name string, flag int, perm os.FileMo...
method Open (line 238) | func (u *CacheOnReadFs) Open(name string) (File, error) {
method Mkdir (line 282) | func (u *CacheOnReadFs) Mkdir(name string, perm os.FileMode) error {
method Name (line 290) | func (u *CacheOnReadFs) Name() string {
method MkdirAll (line 294) | func (u *CacheOnReadFs) MkdirAll(name string, perm os.FileMode) error {
method Create (line 302) | func (u *CacheOnReadFs) Create(name string) (File, error) {
function NewCacheOnReadFs (line 28) | func NewCacheOnReadFs(base Fs, layer Fs, cacheTime time.Duration) Fs {
type cacheState (line 32) | type cacheState
constant cacheMiss (line 36) | cacheMiss cacheState = iota
constant cacheStale (line 38) | cacheStale
constant cacheHit (line 42) | cacheHit
constant cacheLocal (line 45) | cacheLocal
FILE: pkg/afero/const_bsds.go
constant BADFD (line 22) | BADFD = syscall.EBADF
FILE: pkg/afero/const_win_unix.go
constant BADFD (line 26) | BADFD = syscall.EBADFD
FILE: pkg/afero/copyOnWriteFs.go
type CopyOnWriteFs (line 20) | type CopyOnWriteFs struct
method isBaseFile (line 30) | func (u *CopyOnWriteFs) isBaseFile(name string) (bool, error) {
method copyToLayer (line 48) | func (u *CopyOnWriteFs) copyToLayer(name string) error {
method Chtimes (line 52) | func (u *CopyOnWriteFs) Chtimes(name string, atime, mtime time.Time) e...
method Chmod (line 65) | func (u *CopyOnWriteFs) Chmod(name string, mode os.FileMode) error {
method Chown (line 78) | func (u *CopyOnWriteFs) Chown(name string, uid, gid int) error {
method Stat (line 91) | func (u *CopyOnWriteFs) Stat(name string) (os.FileInfo, error) {
method LstatIfPossible (line 103) | func (u *CopyOnWriteFs) LstatIfPossible(name string) (os.FileInfo, boo...
method SymlinkIfPossible (line 133) | func (u *CopyOnWriteFs) SymlinkIfPossible(oldname, newname string) err...
method ReadlinkIfPossible (line 141) | func (u *CopyOnWriteFs) ReadlinkIfPossible(name string) (string, error) {
method isNotExist (line 153) | func (u *CopyOnWriteFs) isNotExist(err error) bool {
method Rename (line 164) | func (u *CopyOnWriteFs) Rename(oldname, newname string) error {
method Remove (line 178) | func (u *CopyOnWriteFs) Remove(name string) error {
method RemoveAll (line 192) | func (u *CopyOnWriteFs) RemoveAll(name string) error {
method OpenFile (line 206) | func (u *CopyOnWriteFs) OpenFile(name string, flag int, perm os.FileMo...
method Open (line 252) | func (u *CopyOnWriteFs) Open(name string) (File, error) {
method Mkdir (line 297) | func (u *CopyOnWriteFs) Mkdir(name string, perm os.FileMode) error {
method Name (line 308) | func (u *CopyOnWriteFs) Name() string {
method MkdirAll (line 312) | func (u *CopyOnWriteFs) MkdirAll(name string, perm os.FileMode) error {
method Create (line 324) | func (u *CopyOnWriteFs) Create(name string) (File, error) {
function NewCopyOnWriteFs (line 25) | func NewCopyOnWriteFs(base Fs, layer Fs) Fs {
FILE: pkg/afero/httpFs.go
type httpDir (line 26) | type httpDir struct
method Open (line 31) | func (d httpDir) Open(name string) (http.File, error) {
type HttpFs (line 48) | type HttpFs struct
method Dir (line 56) | func (h HttpFs) Dir(s string) *httpDir {
method Name (line 60) | func (h HttpFs) Name() string { return "h HttpFs" }
method Create (line 62) | func (h HttpFs) Create(name string) (File, error) {
method Chmod (line 66) | func (h HttpFs) Chmod(name string, mode os.FileMode) error {
method Chown (line 70) | func (h HttpFs) Chown(name string, uid, gid int) error {
method Chtimes (line 74) | func (h HttpFs) Chtimes(name string, atime time.Time, mtime time.Time)...
method Mkdir (line 78) | func (h HttpFs) Mkdir(name string, perm os.FileMode) error {
method MkdirAll (line 82) | func (h HttpFs) MkdirAll(path string, perm os.FileMode) error {
method Open (line 86) | func (h HttpFs) Open(name string) (http.File, error) {
method OpenFile (line 96) | func (h HttpFs) OpenFile(name string, flag int, perm os.FileMode) (Fil...
method Remove (line 100) | func (h HttpFs) Remove(name string) error {
method RemoveAll (line 104) | func (h HttpFs) RemoveAll(path string) error {
method Rename (line 108) | func (h HttpFs) Rename(oldname, newname string) error {
method Stat (line 112) | func (h HttpFs) Stat(name string) (os.FileInfo, error) {
function NewHttpFs (line 52) | func NewHttpFs(source Fs) *HttpFs {
FILE: pkg/afero/iofs.go
type IOFS (line 14) | type IOFS struct
method Open (line 31) | func (iofs IOFS) Open(name string) (fs.File, error) {
method Glob (line 52) | func (iofs IOFS) Glob(pattern string) ([]string, error) {
method ReadDir (line 68) | func (iofs IOFS) ReadDir(name string) ([]fs.DirEntry, error) {
method ReadFile (line 82) | func (iofs IOFS) ReadFile(name string) ([]byte, error) {
method Sub (line 97) | func (iofs IOFS) Sub(dir string) (fs.FS, error) { return IOFS{NewBaseP...
method wrapError (line 99) | func (IOFS) wrapError(op, path string, err error) error {
function NewIOFS (line 18) | func NewIOFS(fs Fs) IOFS {
type dirEntry (line 112) | type dirEntry struct
method Type (line 118) | func (d dirEntry) Type() fs.FileMode { return d.FileInfo.Mode().Type() }
method Info (line 120) | func (d dirEntry) Info() (fs.FileInfo, error) { return d.FileInfo, nil }
type readDirFile (line 123) | type readDirFile struct
method ReadDir (line 129) | func (r readDirFile) ReadDir(n int) ([]fs.DirEntry, error) {
type FromIOFS (line 146) | type FromIOFS struct
method Create (line 152) | func (f FromIOFS) Create(name string) (File, error) { return nil, notI...
method Mkdir (line 154) | func (f FromIOFS) Mkdir(name string, perm os.FileMode) error { return ...
method MkdirAll (line 156) | func (f FromIOFS) MkdirAll(path string, perm os.FileMode) error {
method Open (line 160) | func (f FromIOFS) Open(name string) (File, error) {
method OpenFile (line 169) | func (f FromIOFS) OpenFile(name string, flag int, perm os.FileMode) (F...
method Remove (line 173) | func (f FromIOFS) Remove(name string) error {
method RemoveAll (line 177) | func (f FromIOFS) RemoveAll(path string) error {
method Rename (line 181) | func (f FromIOFS) Rename(oldname, newname string) error {
method Stat (line 185) | func (f FromIOFS) Stat(name string) (os.FileInfo, error) { return fs.S...
method Name (line 187) | func (f FromIOFS) Name() string { return "fromiofs" }
method Chmod (line 189) | func (f FromIOFS) Chmod(name string, mode os.FileMode) error {
method Chown (line 193) | func (f FromIOFS) Chown(name string, uid, gid int) error {
method Chtimes (line 197) | func (f FromIOFS) Chtimes(name string, atime time.Time, mtime time.Tim...
type fromIOFSFile (line 201) | type fromIOFSFile struct
method ReadAt (line 206) | func (f fromIOFSFile) ReadAt(p []byte, off int64) (n int, err error) {
method Seek (line 215) | func (f fromIOFSFile) Seek(offset int64, whence int) (int64, error) {
method Write (line 224) | func (f fromIOFSFile) Write(p []byte) (n int, err error) {
method WriteAt (line 228) | func (f fromIOFSFile) WriteAt(p []byte, off int64) (n int, err error) {
method Name (line 232) | func (f fromIOFSFile) Name() string { return f.name }
method Readdir (line 234) | func (f fromIOFSFile) Readdir(count int) ([]os.FileInfo, error) {
method Readdirnames (line 257) | func (f fromIOFSFile) Readdirnames(n int) ([]string, error) {
method Sync (line 276) | func (f fromIOFSFile) Sync() error { return nil }
method Truncate (line 278) | func (f fromIOFSFile) Truncate(size int64) error {
method WriteString (line 282) | func (f fromIOFSFile) WriteString(s string) (ret int, err error) {
function notImplemented (line 286) | func notImplemented(op, path string) error {
FILE: pkg/afero/ioutil.go
type byName (line 31) | type byName
method Len (line 33) | func (f byName) Len() int { return len(f) }
method Less (line 34) | func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }
method Swap (line 35) | func (f byName) Swap(i, j int) { f[i], f[j] = f[j], f[i] }
method ReadDir (line 39) | func (a Afero) ReadDir(dirname string) ([]os.FileInfo, error) {
function ReadDir (line 43) | func ReadDir(fs Fs, dirname string) ([]os.FileInfo, error) {
method ReadFile (line 61) | func (a Afero) ReadFile(filename string) ([]byte, error) {
function ReadFile (line 65) | func ReadFile(fs Fs, filename string) ([]byte, error) {
function readAll (line 91) | func readAll(r io.Reader, capacity int64) (b []byte, err error) {
function ReadAll (line 114) | func ReadAll(r io.Reader) ([]byte, error) {
method WriteFile (line 121) | func (a Afero) WriteFile(filename string, data []byte, perm os.FileMode)...
function WriteFile (line 125) | func WriteFile(fs Fs, filename string, data []byte, perm os.FileMode) er...
function reseed (line 147) | func reseed() uint32 {
function nextRandom (line 151) | func nextRandom() string {
method TempFile (line 174) | func (a Afero) TempFile(dir, pattern string) (f File, err error) {
function TempFile (line 178) | func TempFile(fs Fs, dir, pattern string) (f File, err error) {
method TempDir (line 214) | func (a Afero) TempDir(dir, prefix string) (name string, err error) {
function TempDir (line 217) | func TempDir(fs Fs, dir, prefix string) (name string, err error) {
FILE: pkg/afero/lstater.go
type Lstater (line 25) | type Lstater interface
FILE: pkg/afero/match.go
function Glob (line 34) | func Glob(fs Fs, pattern string) (matches []string, err error) {
function glob (line 75) | func glob(fs Fs, dir, pattern string, matches []string) (m []string, e e...
function hasMeta (line 107) | func hasMeta(path string) bool {
FILE: pkg/afero/mem/dir.go
type Dir (line 16) | type Dir interface
function RemoveFromMemDir (line 24) | func RemoveFromMemDir(dir *FileData, f *FileData) {
function AddToMemDir (line 28) | func AddToMemDir(dir *FileData, f *FileData) {
function InitializeDir (line 32) | func InitializeDir(d *FileData) {
FILE: pkg/afero/mem/dirmap.go
type DirMap (line 18) | type DirMap
method Len (line 20) | func (m DirMap) Len() int { return len(m) }
method Add (line 21) | func (m DirMap) Add(f *FileData) { m[f.name] = f }
method Remove (line 22) | func (m DirMap) Remove(f *FileData) { delete(m, f.name) }
method Files (line 23) | func (m DirMap) Files() (files []*FileData) {
method Names (line 38) | func (m DirMap) Names() (names []string) {
type filesSorter (line 32) | type filesSorter
method Len (line 34) | func (s filesSorter) Len() int { return len(s) }
method Swap (line 35) | func (s filesSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
method Less (line 36) | func (s filesSorter) Less(i, j int) bool { return s[i].name < s[j].name }
FILE: pkg/afero/mem/file.go
constant FilePathSeparator (line 28) | FilePathSeparator = string(filepath.Separator)
type File (line 30) | type File struct
method Data (line 47) | func (f File) Data() *FileData {
method Open (line 115) | func (f *File) Open() error {
method Close (line 124) | func (f *File) Close() error {
method Name (line 134) | func (f *File) Name() string {
method Stat (line 138) | func (f *File) Stat() (os.FileInfo, error) {
method Sync (line 142) | func (f *File) Sync() error {
method Readdir (line 146) | func (f *File) Readdir(count int) (res []os.FileInfo, err error) {
method Readdirnames (line 177) | func (f *File) Readdirnames(n int) (names []string, err error) {
method Read (line 186) | func (f *File) Read(b []byte) (n int, err error) {
method ReadAt (line 208) | func (f *File) ReadAt(b []byte, off int64) (n int, err error) {
method Truncate (line 216) | func (f *File) Truncate(size int64) error {
method Seek (line 238) | func (f *File) Seek(offset int64, whence int) (int64, error) {
method Write (line 253) | func (f *File) Write(b []byte) (n int, err error) {
method WriteAt (line 282) | func (f *File) WriteAt(b []byte, off int64) (n int, err error) {
method WriteString (line 287) | func (f *File) WriteString(s string) (ret int, err error) {
method Info (line 291) | func (f *File) Info() *FileInfo {
function NewFileHandle (line 39) | func NewFileHandle(data *FileData) *File {
function NewReadOnlyFileHandle (line 43) | func NewReadOnlyFileHandle(data *FileData) *File {
type FileData (line 51) | type FileData struct
method Name (line 63) | func (d *FileData) Name() string {
function CreateFile (line 69) | func CreateFile(name string) *FileData {
function CreateDir (line 73) | func CreateDir(name string) *FileData {
function ChangeFileName (line 77) | func ChangeFileName(f *FileData, newname string) {
function SetMode (line 83) | func SetMode(f *FileData, mode os.FileMode) {
function SetModTime (line 89) | func SetModTime(f *FileData, mtime time.Time) {
function setModTime (line 95) | func setModTime(f *FileData, mtime time.Time) {
function SetUID (line 99) | func SetUID(f *FileData, uid int) {
function SetGID (line 105) | func SetGID(f *FileData, gid int) {
function GetFileInfo (line 111) | func GetFileInfo(f *FileData) *FileInfo {
type FileInfo (line 295) | type FileInfo struct
method Name (line 300) | func (s *FileInfo) Name() string {
method Mode (line 306) | func (s *FileInfo) Mode() os.FileMode {
method ModTime (line 311) | func (s *FileInfo) ModTime() time.Time {
method IsDir (line 316) | func (s *FileInfo) IsDir() bool {
method Sys (line 321) | func (s *FileInfo) Sys() interface{} { return nil }
method Size (line 322) | func (s *FileInfo) Size() int64 {
FILE: pkg/afero/memmap.go
constant chmodBits (line 28) | chmodBits = os.ModePerm | os.ModeSetuid | os.ModeSetgid | os.ModeSticky
type MemMapFs (line 30) | type MemMapFs struct
method getData (line 40) | func (m *MemMapFs) getData() map[string]*mem.FileData {
method Name (line 52) | func (*MemMapFs) Name() string { return "MemMapFS" }
method Create (line 54) | func (m *MemMapFs) Create(name string) (File, error) {
method unRegisterWithParent (line 64) | func (m *MemMapFs) unRegisterWithParent(fileName string) error {
method findParent (line 80) | func (m *MemMapFs) findParent(f *mem.FileData) *mem.FileData {
method findDescendants (line 90) | func (m *MemMapFs) findDescendants(name string) []*mem.FileData {
method registerWithParent (line 108) | func (m *MemMapFs) registerWithParent(f *mem.FileData, perm os.FileMod...
method lockfreeMkdir (line 133) | func (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error {
method Mkdir (line 151) | func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
method MkdirAll (line 172) | func (m *MemMapFs) MkdirAll(path string, perm os.FileMode) error {
method Open (line 197) | func (m *MemMapFs) Open(name string) (File, error) {
method openWrite (line 205) | func (m *MemMapFs) openWrite(name string) (File, error) {
method open (line 213) | func (m *MemMapFs) open(name string) (*mem.FileData, error) {
method lockfreeOpen (line 225) | func (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) {
method OpenFile (line 235) | func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (...
method Remove (line 272) | func (m *MemMapFs) Remove(name string) error {
method RemoveAll (line 290) | func (m *MemMapFs) RemoveAll(path string) error {
method Rename (line 311) | func (m *MemMapFs) Rename(oldName, newName string) error {
method renameDescendants (line 349) | func (m *MemMapFs) renameDescendants(oldName, newName string) error {
method LstatIfPossible (line 372) | func (m *MemMapFs) LstatIfPossible(name string) (os.FileInfo, bool, er...
method Stat (line 377) | func (m *MemMapFs) Stat(name string) (os.FileInfo, error) {
method Chmod (line 386) | func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
method setFileMode (line 401) | func (m *MemMapFs) setFileMode(name string, mode os.FileMode) error {
method Chown (line 418) | func (m *MemMapFs) Chown(name string, uid, gid int) error {
method Chtimes (line 434) | func (m *MemMapFs) Chtimes(name string, atime time.Time, mtime time.Ti...
method List (line 451) | func (m *MemMapFs) List() {
function NewMemMapFs (line 36) | func NewMemMapFs() Fs {
function normalizePath (line 184) | func normalizePath(path string) string {
FILE: pkg/afero/os.go
type OsFs (line 28) | type OsFs struct
method Name (line 34) | func (OsFs) Name() string { return "OsFs" }
method Create (line 36) | func (OsFs) Create(name string) (File, error) {
method Mkdir (line 46) | func (OsFs) Mkdir(name string, perm os.FileMode) error {
method MkdirAll (line 50) | func (OsFs) MkdirAll(path string, perm os.FileMode) error {
method Open (line 54) | func (OsFs) Open(name string) (File, error) {
method OpenFile (line 64) | func (OsFs) OpenFile(name string, flag int, perm os.FileMode) (File, e...
method Remove (line 74) | func (OsFs) Remove(name string) error {
method RemoveAll (line 78) | func (OsFs) RemoveAll(path string) error {
method Rename (line 82) | func (OsFs) Rename(oldname, newname string) error {
method Stat (line 86) | func (OsFs) Stat(name string) (os.FileInfo, error) {
method Chmod (line 90) | func (OsFs) Chmod(name string, mode os.FileMode) error {
method Chown (line 94) | func (OsFs) Chown(name string, uid, gid int) error {
method Chtimes (line 98) | func (OsFs) Chtimes(name string, atime time.Time, mtime time.Time) err...
method LstatIfPossible (line 102) | func (OsFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
method SymlinkIfPossible (line 107) | func (OsFs) SymlinkIfPossible(oldname, newname string) error {
method ReadlinkIfPossible (line 111) | func (OsFs) ReadlinkIfPossible(name string) (string, error) {
function NewOsFs (line 30) | func NewOsFs() Fs {
FILE: pkg/afero/path.go
function readDirNames (line 27) | func readDirNames(fs Fs, dirname string) ([]string, error) {
function walk (line 43) | func walk(fs Fs, path string, info os.FileInfo, walkFn filepath.WalkFunc...
function lstatIfPossible (line 81) | func lstatIfPossible(fs Fs, path string) (os.FileInfo, error) {
method Walk (line 96) | func (a Afero) Walk(root string, walkFn filepath.WalkFunc) error {
function Walk (line 100) | func Walk(fs Fs, root string, walkFn filepath.WalkFunc) error {
FILE: pkg/afero/readonlyfs.go
type ReadOnlyFs (line 11) | type ReadOnlyFs struct
method ReadDir (line 19) | func (r *ReadOnlyFs) ReadDir(name string) ([]os.FileInfo, error) {
method Chtimes (line 23) | func (r *ReadOnlyFs) Chtimes(n string, a, m time.Time) error {
method Chmod (line 27) | func (r *ReadOnlyFs) Chmod(n string, m os.FileMode) error {
method Chown (line 31) | func (r *ReadOnlyFs) Chown(n string, uid, gid int) error {
method Name (line 35) | func (r *ReadOnlyFs) Name() string {
method Stat (line 39) | func (r *ReadOnlyFs) Stat(name string) (os.FileInfo, error) {
method LstatIfPossible (line 43) | func (r *ReadOnlyFs) LstatIfPossible(name string) (os.FileInfo, bool, ...
method SymlinkIfPossible (line 51) | func (r *ReadOnlyFs) SymlinkIfPossible(oldname, newname string) error {
method ReadlinkIfPossible (line 55) | func (r *ReadOnlyFs) ReadlinkIfPossible(name string) (string, error) {
method Rename (line 63) | func (r *ReadOnlyFs) Rename(o, n string) error {
method RemoveAll (line 67) | func (r *ReadOnlyFs) RemoveAll(p string) error {
method Remove (line 71) | func (r *ReadOnlyFs) Remove(n string) error {
method OpenFile (line 75) | func (r *ReadOnlyFs) OpenFile(name string, flag int, perm os.FileMode)...
method Open (line 82) | func (r *ReadOnlyFs) Open(n string) (File, error) {
method Mkdir (line 86) | func (r *ReadOnlyFs) Mkdir(n string, p os.FileMode) error {
method MkdirAll (line 90) | func (r *ReadOnlyFs) MkdirAll(n string, p os.FileMode) error {
method Create (line 94) | func (r *ReadOnlyFs) Create(n string) (File, error) {
function NewReadOnlyFs (line 15) | func NewReadOnlyFs(source Fs) Fs {
FILE: pkg/afero/regexpfs.go
type RegexpFs (line 14) | type RegexpFs struct
method matchesName (line 28) | func (r *RegexpFs) matchesName(name string) error {
method dirOrMatches (line 38) | func (r *RegexpFs) dirOrMatches(name string) error {
method Chtimes (line 49) | func (r *RegexpFs) Chtimes(name string, a, m time.Time) error {
method Chmod (line 56) | func (r *RegexpFs) Chmod(name string, mode os.FileMode) error {
method Chown (line 63) | func (r *RegexpFs) Chown(name string, uid, gid int) error {
method Name (line 70) | func (r *RegexpFs) Name() string {
method Stat (line 74) | func (r *RegexpFs) Stat(name string) (os.FileInfo, error) {
method Rename (line 81) | func (r *RegexpFs) Rename(oldname, newname string) error {
method RemoveAll (line 98) | func (r *RegexpFs) RemoveAll(p string) error {
method Remove (line 111) | func (r *RegexpFs) Remove(name string) error {
method OpenFile (line 118) | func (r *RegexpFs) OpenFile(name string, flag int, perm os.FileMode) (...
method Open (line 125) | func (r *RegexpFs) Open(name string) (File, error) {
method Mkdir (line 142) | func (r *RegexpFs) Mkdir(n string, p os.FileMode) error {
method MkdirAll (line 146) | func (r *RegexpFs) MkdirAll(n string, p os.FileMode) error {
method Create (line 150) | func (r *RegexpFs) Create(name string) (File, error) {
function NewRegexpFs (line 19) | func NewRegexpFs(source Fs, re *regexp.Regexp) Fs {
type RegexpFile (line 23) | type RegexpFile struct
method Close (line 157) | func (f *RegexpFile) Close() error {
method Read (line 161) | func (f *RegexpFile) Read(s []byte) (int, error) {
method ReadAt (line 165) | func (f *RegexpFile) ReadAt(s []byte, o int64) (int, error) {
method Seek (line 169) | func (f *RegexpFile) Seek(o int64, w int) (int64, error) {
method Write (line 173) | func (f *RegexpFile) Write(s []byte) (int, error) {
method WriteAt (line 177) | func (f *RegexpFile) WriteAt(s []byte, o int64) (int, error) {
method Name (line 181) | func (f *RegexpFile) Name() string {
method Readdir (line 185) | func (f *RegexpFile) Readdir(c int) (fi []os.FileInfo, err error) {
method Readdirnames (line 199) | func (f *RegexpFile) Readdirnames(c int) (n []string, err error) {
method Stat (line 210) | func (f *RegexpFile) Stat() (os.FileInfo, error) {
method Sync (line 214) | func (f *RegexpFile) Sync() error {
method Truncate (line 218) | func (f *RegexpFile) Truncate(s int64) error {
method WriteString (line 222) | func (f *RegexpFile) WriteString(s string) (int, error) {
FILE: pkg/afero/symlink.go
type Symlinker (line 27) | type Symlinker interface
type Linker (line 37) | type Linker interface
type LinkReader (line 48) | type LinkReader interface
FILE: pkg/afero/unionFile.go
type UnionFile (line 23) | type UnionFile struct
method Close (line 31) | func (f *UnionFile) Close() error {
method Read (line 44) | func (f *UnionFile) Read(s []byte) (int, error) {
method ReadAt (line 64) | func (f *UnionFile) ReadAt(s []byte, o int64) (int, error) {
method Seek (line 78) | func (f *UnionFile) Seek(o int64, w int) (pos int64, err error) {
method Write (line 92) | func (f *UnionFile) Write(s []byte) (n int, err error) {
method WriteAt (line 106) | func (f *UnionFile) WriteAt(s []byte, o int64) (n int, err error) {
method Name (line 120) | func (f *UnionFile) Name() string {
method Readdir (line 160) | func (f *UnionFile) Readdir(c int) (ofi []os.FileInfo, err error) {
method Readdirnames (line 207) | func (f *UnionFile) Readdirnames(c int) ([]string, error) {
method Stat (line 219) | func (f *UnionFile) Stat() (os.FileInfo, error) {
method Sync (line 229) | func (f *UnionFile) Sync() (err error) {
method Truncate (line 243) | func (f *UnionFile) Truncate(s int64) (err error) {
method WriteString (line 257) | func (f *UnionFile) WriteString(s string) (n int, err error) {
type DirsMerger (line 130) | type DirsMerger
function copyFile (line 271) | func copyFile(base Fs, layer Fs, name string, bfh File) error {
function copyToLayer (line 313) | func copyToLayer(base Fs, layer Fs, name string) error {
function copyFileToLayer (line 323) | func copyFileToLayer(base Fs, layer Fs, name string, flag int, perm os.F...
FILE: pkg/afero/util.go
constant FilePathSeparator (line 33) | FilePathSeparator = string(filepath.Separator)
method WriteReader (line 36) | func (a Afero) WriteReader(path string, r io.Reader) (err error) {
function WriteReader (line 40) | func WriteReader(fs Fs, path string, r io.Reader) (err error) {
method SafeWriteReader (line 64) | func (a Afero) SafeWriteReader(path string, r io.Reader) (err error) {
function SafeWriteReader (line 68) | func SafeWriteReader(fs Fs, path string, r io.Reader) (err error) {
method GetTempDir (line 97) | func (a Afero) GetTempDir(subPath string) string {
function GetTempDir (line 103) | func GetTempDir(fs Fs, subPath string) string {
function UnicodeSanitize (line 136) | func UnicodeSanitize(s string) string {
function NeuterAccents (line 160) | func NeuterAccents(s string) string {
function isMn (line 167) | func isMn(r rune) bool {
method FileContainsBytes (line 171) | func (a Afero) FileContainsBytes(filename string, subslice []byte) (bool...
function FileContainsBytes (line 176) | func FileContainsBytes(fs Fs, filename string, subslice []byte) (bool, e...
method FileContainsAnyBytes (line 186) | func (a Afero) FileContainsAnyBytes(filename string, subslices [][]byte)...
function FileContainsAnyBytes (line 191) | func FileContainsAnyBytes(fs Fs, filename string, subslices [][]byte) (b...
function readerContainsAny (line 202) | func readerContainsAny(r io.Reader, subslices ...[]byte) bool {
method DirExists (line 253) | func (a Afero) DirExists(path string) (bool, error) {
function DirExists (line 258) | func DirExists(fs Fs, path string) (bool, error) {
method IsDir (line 269) | func (a Afero) IsDir(path string) (bool, error) {
function IsDir (line 274) | func IsDir(fs Fs, path string) (bool, error) {
method IsEmpty (line 282) | func (a Afero) IsEmpty(path string) (bool, error) {
function IsEmpty (line 287) | func IsEmpty(fs Fs, path string) (bool, error) {
method Exists (line 307) | func (a Afero) Exists(path string) (bool, error) {
function Exists (line 312) | func Exists(fs Fs, path string) (bool, error) {
function FullBaseFsPath (line 323) | func FullBaseFsPath(basePathFs *BasePathFs, relativePath string) string {
FILE: vendor/github.com/chzyer/readline/ansi_windows.go
constant _ (line 16) | _ = uint16(0)
constant COLOR_FBLUE (line 17) | COLOR_FBLUE = 0x0001
constant COLOR_FGREEN (line 18) | COLOR_FGREEN = 0x0002
constant COLOR_FRED (line 19) | COLOR_FRED = 0x0004
constant COLOR_FINTENSITY (line 20) | COLOR_FINTENSITY = 0x0008
constant COLOR_BBLUE (line 22) | COLOR_BBLUE = 0x0010
constant COLOR_BGREEN (line 23) | COLOR_BGREEN = 0x0020
constant COLOR_BRED (line 24) | COLOR_BRED = 0x0040
constant COLOR_BINTENSITY (line 25) | COLOR_BINTENSITY = 0x0080
constant COMMON_LVB_UNDERSCORE (line 27) | COMMON_LVB_UNDERSCORE = 0x8000
constant COMMON_LVB_BOLD (line 28) | COMMON_LVB_BOLD = 0x0007
type ANSIWriter (line 53) | type ANSIWriter struct
method Close (line 68) | func (a *ANSIWriter) Close() error {
method Write (line 196) | func (a *ANSIWriter) Write(b []byte) (int, error) {
function NewANSIWriter (line 60) | func NewANSIWriter(w io.Writer) *ANSIWriter {
type ANSIWriterCtx (line 73) | type ANSIWriterCtx struct
method Flush (line 87) | func (a *ANSIWriterCtx) Flush() {
method process (line 91) | func (a *ANSIWriterCtx) process(r rune) bool {
method ioloopEscSeq (line 121) | func (a *ANSIWriterCtx) ioloopEscSeq(w *bufio.Writer, r rune, argptr *...
function NewANSIWriterCtx (line 81) | func NewANSIWriterCtx(target io.Writer) *ANSIWriterCtx {
function killLines (line 213) | func killLines() error {
function eraseLine (line 235) | func eraseLine() error {
FILE: vendor/github.com/chzyer/readline/complete.go
type AutoCompleter (line 10) | type AutoCompleter interface
type TabCompleter (line 21) | type TabCompleter struct
method Do (line 23) | func (t *TabCompleter) Do([]rune, int) ([][]rune, int) {
type opCompleter (line 27) | type opCompleter struct
method doSelect (line 49) | func (o *opCompleter) doSelect() {
method nextCandidate (line 59) | func (o *opCompleter) nextCandidate(i int) {
method OnComplete (line 67) | func (o *opCompleter) OnComplete() bool {
method IsInCompleteSelectMode (line 113) | func (o *opCompleter) IsInCompleteSelectMode() bool {
method IsInCompleteMode (line 117) | func (o *opCompleter) IsInCompleteMode() bool {
method HandleCompleteSelect (line 121) | func (o *opCompleter) HandleCompleteSelect(r rune) bool {
method getMatrixSize (line 176) | func (o *opCompleter) getMatrixSize() int {
method OnWidthChange (line 184) | func (o *opCompleter) OnWidthChange(newWidth int) {
method CompleteRefresh (line 188) | func (o *opCompleter) CompleteRefresh() {
method aggCandidate (line 244) | func (o *opCompleter) aggCandidate(candidate [][]rune) int {
method EnterCompleteSelectMode (line 261) | func (o *opCompleter) EnterCompleteSelectMode() {
method EnterCompleteMode (line 267) | func (o *opCompleter) EnterCompleteMode(offset int, candidate [][]rune) {
method ExitCompleteSelectMode (line 274) | func (o *opCompleter) ExitCompleteSelectMode() {
method ExitCompleteMode (line 282) | func (o *opCompleter) ExitCompleteMode(revent bool) {
function newOpCompleter (line 41) | func newOpCompleter(w io.Writer, op *Operation, width int) *opCompleter {
FILE: vendor/github.com/chzyer/readline/complete_helper.go
type DynamicCompleteFunc (line 9) | type DynamicCompleteFunc
type PrefixCompleterInterface (line 11) | type PrefixCompleterInterface interface
type DynamicPrefixCompleterInterface (line 19) | type DynamicPrefixCompleterInterface interface
type PrefixCompleter (line 25) | type PrefixCompleter struct
method Tree (line 32) | func (p *PrefixCompleter) Tree(prefix string) string {
method Print (line 54) | func (p *PrefixCompleter) Print(prefix string, level int, buf *bytes.B...
method IsDynamic (line 58) | func (p *PrefixCompleter) IsDynamic() bool {
method GetName (line 62) | func (p *PrefixCompleter) GetName() []rune {
method GetDynamicNames (line 66) | func (p *PrefixCompleter) GetDynamicNames(line []rune) [][]rune {
method GetChildren (line 74) | func (p *PrefixCompleter) GetChildren() []PrefixCompleterInterface {
method SetChildren (line 78) | func (p *PrefixCompleter) SetChildren(children []PrefixCompleterInterf...
method Do (line 103) | func (p *PrefixCompleter) Do(line []rune, pos int) (newLine [][]rune, ...
function Print (line 38) | func Print(p PrefixCompleterInterface, prefix string, level int, buf *by...
function NewPrefixCompleter (line 82) | func NewPrefixCompleter(pc ...PrefixCompleterInterface) *PrefixCompleter {
function PcItem (line 86) | func PcItem(name string, pc ...PrefixCompleterInterface) *PrefixCompleter {
function PcItemDynamic (line 95) | func PcItemDynamic(callback DynamicCompleteFunc, pc ...PrefixCompleterIn...
function Do (line 107) | func Do(p PrefixCompleterInterface, line []rune, pos int) (newLine [][]r...
function doInternal (line 111) | func doInternal(p PrefixCompleterInterface, line []rune, pos int, origLi...
FILE: vendor/github.com/chzyer/readline/complete_segment.go
type SegmentCompleter (line 3) | type SegmentCompleter interface
type dumpSegmentCompleter (line 20) | type dumpSegmentCompleter struct
method DoSegment (line 24) | func (d *dumpSegmentCompleter) DoSegment(segment [][]rune, n int) [][]...
function SegmentFunc (line 28) | func SegmentFunc(f func([][]rune, int) [][]rune) AutoCompleter {
function SegmentAutoComplete (line 32) | func SegmentAutoComplete(completer SegmentCompleter) *SegmentComplete {
type SegmentComplete (line 38) | type SegmentComplete struct
method Do (line 72) | func (c *SegmentComplete) Do(line []rune, pos int) (newLine [][]rune, ...
function RetSegment (line 42) | func RetSegment(segments [][]rune, cands [][]rune, idx int) ([][]rune, i...
function SplitSegment (line 54) | func SplitSegment(line []rune, pos int) ([][]rune, int) {
FILE: vendor/github.com/chzyer/readline/history.go
type hisItem (line 12) | type hisItem struct
method Clean (line 18) | func (h *hisItem) Clean() {
type opHistory (line 23) | type opHistory struct
method Reset (line 42) | func (o *opHistory) Reset() {
method IsHistoryClosed (line 47) | func (o *opHistory) IsHistoryClosed() bool {
method Init (line 53) | func (o *opHistory) Init() {
method initHistory (line 59) | func (o *opHistory) initHistory() {
method historyUpdatePath (line 66) | func (o *opHistory) historyUpdatePath(path string) {
method Compact (line 97) | func (o *opHistory) Compact() {
method Rewrite (line 103) | func (o *opHistory) Rewrite() {
method rewriteLocked (line 109) | func (o *opHistory) rewriteLocked() {
method Close (line 139) | func (o *opHistory) Close() {
method FindBck (line 147) | func (o *opHistory) FindBck(isNewSearch bool, rs []rune, start int) (i...
method FindFwd (line 167) | func (o *opHistory) FindFwd(isNewSearch bool, rs []rune, start int) (i...
method showItem (line 195) | func (o *opHistory) showItem(obj interface{}) []rune {
method Prev (line 203) | func (o *opHistory) Prev() []rune {
method Next (line 215) | func (o *opHistory) Next() ([]rune, bool) {
method Disable (line 229) | func (o *opHistory) Disable() {
method Enable (line 234) | func (o *opHistory) Enable() {
method debug (line 238) | func (o *opHistory) debug() {
method New (line 246) | func (o *opHistory) New(current []rune) (err error) {
method Revert (line 296) | func (o *opHistory) Revert() {
method Update (line 301) | func (o *opHistory) Update(s []rune, commit bool) (err error) {
method Push (line 326) | func (o *opHistory) Push(s []rune) {
function newOpHistory (line 33) | func newOpHistory(cfg *Config) (o *opHistory) {
FILE: vendor/github.com/chzyer/readline/operation.go
type InterruptError (line 13) | type InterruptError struct
method Error (line 17) | func (*InterruptError) Error() string {
type Operation (line 21) | type Operation struct
method SetBuffer (line 37) | func (o *Operation) SetBuffer(what string) {
method SetPrompt (line 92) | func (o *Operation) SetPrompt(s string) {
method SetMaskRune (line 96) | func (o *Operation) SetMaskRune(r rune) {
method GetConfig (line 100) | func (o *Operation) GetConfig() *Config {
method ioloop (line 107) | func (o *Operation) ioloop() {
method Stderr (line 366) | func (o *Operation) Stderr() io.Writer {
method Stdout (line 370) | func (o *Operation) Stdout() io.Writer {
method String (line 374) | func (o *Operation) String() (string, error) {
method Runes (line 379) | func (o *Operation) Runes() ([]rune, error) {
method PasswordEx (line 401) | func (o *Operation) PasswordEx(prompt string, l Listener) ([]byte, err...
method GenPasswordConfig (line 408) | func (o *Operation) GenPasswordConfig() *Config {
method PasswordWithConfig (line 412) | func (o *Operation) PasswordWithConfig(cfg *Config) ([]byte, error) {
method Password (line 420) | func (o *Operation) Password(prompt string) ([]byte, error) {
method SetTitle (line 424) | func (o *Operation) SetTitle(t string) {
method Slice (line 428) | func (o *Operation) Slice() ([]byte, error) {
method Close (line 436) | func (o *Operation) Close() {
method SetHistoryPath (line 440) | func (o *Operation) SetHistoryPath(path string) {
method IsNormalMode (line 448) | func (o *Operation) IsNormalMode() bool {
method SetConfig (line 452) | func (op *Operation) SetConfig(cfg *Config) (*Config, error) {
method ResetHistory (line 487) | func (o *Operation) ResetHistory() {
method SaveHistory (line 493) | func (o *Operation) SaveHistory(content string) error {
method Refresh (line 497) | func (o *Operation) Refresh() {
method Clean (line 503) | func (o *Operation) Clean() {
type wrapWriter (line 41) | type wrapWriter struct
method Write (line 47) | func (w *wrapWriter) Write(b []byte) (int, error) {
function NewOperation (line 69) | func NewOperation(t *Terminal, cfg *Config) *Operation {
function FuncListener (line 507) | func FuncListener(f func(line []rune, pos int, key rune) (newLine []rune...
type DumpListener (line 511) | type DumpListener struct
method OnChange (line 515) | func (d *DumpListener) OnChange(line []rune, pos int, key rune) (newLi...
type Listener (line 519) | type Listener interface
type Painter (line 523) | type Painter interface
type defaultPainter (line 527) | type defaultPainter struct
method Paint (line 529) | func (p *defaultPainter) Paint(line []rune, _ int) []rune {
FILE: vendor/github.com/chzyer/readline/password.go
type opPassword (line 3) | type opPassword struct
method ExitPasswordMode (line 12) | func (o *opPassword) ExitPasswordMode() {
method EnterPasswordMode (line 17) | func (o *opPassword) EnterPasswordMode(cfg *Config) (err error) {
method PasswordConfig (line 22) | func (o *opPassword) PasswordConfig() *Config {
function newOpPassword (line 8) | func newOpPassword(o *Operation) *opPassword {
FILE: vendor/github.com/chzyer/readline/rawreader_windows.go
constant VK_CANCEL (line 8) | VK_CANCEL = 0x03
constant VK_BACK (line 9) | VK_BACK = 0x08
constant VK_TAB (line 10) | VK_TAB = 0x09
constant VK_RETURN (line 11) | VK_RETURN = 0x0D
constant VK_SHIFT (line 12) | VK_SHIFT = 0x10
constant VK_CONTROL (line 13) | VK_CONTROL = 0x11
constant VK_MENU (line 14) | VK_MENU = 0x12
constant VK_ESCAPE (line 15) | VK_ESCAPE = 0x1B
constant VK_LEFT (line 16) | VK_LEFT = 0x25
constant VK_UP (line 17) | VK_UP = 0x26
constant VK_RIGHT (line 18) | VK_RIGHT = 0x27
constant VK_DOWN (line 19) | VK_DOWN = 0x28
constant VK_DELETE (line 20) | VK_DELETE = 0x2E
constant VK_LSHIFT (line 21) | VK_LSHIFT = 0xA0
constant VK_RSHIFT (line 22) | VK_RSHIFT = 0xA1
constant VK_LCONTROL (line 23) | VK_LCONTROL = 0xA2
constant VK_RCONTROL (line 24) | VK_RCONTROL = 0xA3
type RawReader (line 29) | type RawReader struct
method Read (line 40) | func (r *RawReader) Read(buf []byte) (int, error) {
method writeEsc (line 112) | func (r *RawReader) writeEsc(b []byte, char rune) (int, error) {
method write (line 118) | func (r *RawReader) write(b []byte, char rune) (int, error) {
method Close (line 123) | func (r *RawReader) Close() error {
function NewRawReader (line 34) | func NewRawReader() *RawReader {
FILE: vendor/github.com/chzyer/readline/readline.go
type Instance (line 22) | type Instance struct
method ResetHistory (line 182) | func (i *Instance) ResetHistory() {
method SetPrompt (line 186) | func (i *Instance) SetPrompt(s string) {
method SetMaskRune (line 190) | func (i *Instance) SetMaskRune(r rune) {
method SetHistoryPath (line 195) | func (i *Instance) SetHistoryPath(p string) {
method Stdout (line 200) | func (i *Instance) Stdout() io.Writer {
method Stderr (line 205) | func (i *Instance) Stderr() io.Writer {
method SetVimMode (line 210) | func (i *Instance) SetVimMode(on bool) {
method IsVimMode (line 214) | func (i *Instance) IsVimMode() bool {
method GenPasswordConfig (line 218) | func (i *Instance) GenPasswordConfig() *Config {
method ReadPasswordWithConfig (line 223) | func (i *Instance) ReadPasswordWithConfig(cfg *Config) ([]byte, error) {
method ReadPasswordEx (line 227) | func (i *Instance) ReadPasswordEx(prompt string, l Listener) ([]byte, ...
method ReadPassword (line 231) | func (i *Instance) ReadPassword(prompt string) ([]byte, error) {
method Line (line 248) | func (i *Instance) Line() *Result {
method Readline (line 254) | func (i *Instance) Readline() (string, error) {
method ReadlineWithDefault (line 258) | func (i *Instance) ReadlineWithDefault(what string) (string, error) {
method SaveHistory (line 263) | func (i *Instance) SaveHistory(content string) error {
method ReadSlice (line 268) | func (i *Instance) ReadSlice() ([]byte, error) {
method Close (line 273) | func (i *Instance) Close() error {
method Clean (line 281) | func (i *Instance) Clean() {
method Write (line 285) | func (i *Instance) Write(b []byte) (int, error) {
method WriteStdin (line 299) | func (i *Instance) WriteStdin(val []byte) (int, error) {
method SetConfig (line 303) | func (i *Instance) SetConfig(cfg *Config) *Config {
method Refresh (line 314) | func (i *Instance) Refresh() {
method HistoryDisable (line 319) | func (i *Instance) HistoryDisable() {
method HistoryEnable (line 324) | func (i *Instance) HistoryEnable() {
type Config (line 28) | type Config struct
method useInteractive (line 86) | func (c *Config) useInteractive() bool {
method Init (line 93) | func (c *Config) Init() error {
method Clone (line 148) | func (c Config) Clone() *Config {
method SetListener (line 154) | func (c *Config) SetListener(f func(line []rune, pos int, key rune) (n...
method SetPainter (line 158) | func (c *Config) SetPainter(p Painter) {
function NewEx (line 162) | func NewEx(cfg *Config) (*Instance, error) {
function New (line 178) | func New(prompt string) (*Instance, error) {
type Result (line 235) | type Result struct
method CanContinue (line 240) | func (l *Result) CanContinue() bool {
method CanBreak (line 244) | func (l *Result) CanBreak() bool {
FILE: vendor/github.com/chzyer/readline/remote.go
type MsgType (line 15) | type MsgType
constant T_DATA (line 18) | T_DATA = MsgType(iota)
constant T_WIDTH (line 19) | T_WIDTH
constant T_WIDTH_REPORT (line 20) | T_WIDTH_REPORT
constant T_ISTTY_REPORT (line 21) | T_ISTTY_REPORT
constant T_RAW (line 22) | T_RAW
constant T_ERAW (line 23) | T_ERAW
constant T_EOF (line 24) | T_EOF
type RemoteSvr (line 27) | type RemoteSvr struct
method init (line 78) | func (r *RemoteSvr) init(buf *bufio.Reader) error {
method HandleConfig (line 102) | func (r *RemoteSvr) HandleConfig(cfg *Config) {
method IsTerminal (line 116) | func (r *RemoteSvr) IsTerminal() bool {
method checkEOF (line 120) | func (r *RemoteSvr) checkEOF() error {
method Read (line 127) | func (r *RemoteSvr) Read(b []byte) (int, error) {
method writeMsg (line 152) | func (r *RemoteSvr) writeMsg(m *Message) error {
method Write (line 159) | func (r *RemoteSvr) Write(b []byte) (int, error) {
method EnterRawMode (line 166) | func (r *RemoteSvr) EnterRawMode() error {
method ExitRawMode (line 170) | func (r *RemoteSvr) ExitRawMode() error {
method writeLoop (line 174) | func (r *RemoteSvr) writeLoop() {
method Close (line 192) | func (r *RemoteSvr) Close() error {
method readLoop (line 200) | func (r *RemoteSvr) readLoop(buf *bufio.Reader) {
method GotIsTerminal (line 230) | func (r *RemoteSvr) GotIsTerminal(data []byte) {
method GotReportWidth (line 238) | func (r *RemoteSvr) GotReportWidth(data []byte) {
method GetWidth (line 245) | func (r *RemoteSvr) GetWidth() int {
type writeReply (line 42) | type writeReply struct
type writeCtx (line 47) | type writeCtx struct
function newWriteCtx (line 52) | func newWriteCtx(msg *Message) *writeCtx {
function NewRemoteSvr (line 59) | func NewRemoteSvr(conn net.Conn) (*RemoteSvr, error) {
type Message (line 251) | type Message struct
method WriteTo (line 276) | func (m *Message) WriteTo(w io.Writer) (int, error) {
function ReadMessage (line 256) | func ReadMessage(r io.Reader) (*Message, error) {
function NewMessage (line 272) | func NewMessage(t MsgType, data []byte) *Message {
type RemoteCli (line 287) | type RemoteCli struct
method MarkIsTerminal (line 306) | func (r *RemoteCli) MarkIsTerminal(is bool) {
method init (line 310) | func (r *RemoteCli) init() error {
method writeMsg (line 330) | func (r *RemoteCli) writeMsg(m *Message) error {
method Write (line 337) | func (r *RemoteCli) Write(b []byte) (int, error) {
method reportWidth (line 345) | func (r *RemoteCli) reportWidth() error {
method reportIsTerminal (line 357) | func (r *RemoteCli) reportIsTerminal() error {
method readLoop (line 377) | func (r *RemoteCli) readLoop() {
method ServeBy (line 395) | func (r *RemoteCli) ServeBy(source io.Reader) error {
method Close (line 414) | func (r *RemoteCli) Close() {
method Serve (line 418) | func (r *RemoteCli) Serve() error {
function NewRemoteCli (line 298) | func NewRemoteCli(conn net.Conn) (*RemoteCli, error) {
function ListenRemote (line 422) | func ListenRemote(n, addr string, cfg *Config, h func(*Instance), onList...
function HandleConn (line 449) | func HandleConn(cfg Config, conn net.Conn) (*Instance, error) {
function DialRemote (line 463) | func DialRemote(n, addr string) error {
FILE: vendor/github.com/chzyer/readline/runebuf.go
type runeBufferBck (line 12) | type runeBufferBck struct
type RuneBuffer (line 17) | type RuneBuffer struct
method pushKill (line 38) | func (r* RuneBuffer) pushKill(text []rune) {
method OnWidthChange (line 42) | func (r *RuneBuffer) OnWidthChange(newWidth int) {
method Backup (line 48) | func (r *RuneBuffer) Backup() {
method Restore (line 54) | func (r *RuneBuffer) Restore() {
method SetConfig (line 75) | func (r *RuneBuffer) SetConfig(cfg *Config) {
method SetMask (line 82) | func (r *RuneBuffer) SetMask(m rune) {
method CurrentWidth (line 88) | func (r *RuneBuffer) CurrentWidth(x int) int {
method PromptLen (line 94) | func (r *RuneBuffer) PromptLen() int {
method promptLen (line 101) | func (r *RuneBuffer) promptLen() int {
method RuneSlice (line 105) | func (r *RuneBuffer) RuneSlice(i int) []rune {
method Runes (line 119) | func (r *RuneBuffer) Runes() []rune {
method Pos (line 127) | func (r *RuneBuffer) Pos() int {
method Len (line 133) | func (r *RuneBuffer) Len() int {
method MoveToLineStart (line 139) | func (r *RuneBuffer) MoveToLineStart() {
method MoveBackward (line 148) | func (r *RuneBuffer) MoveBackward() {
method WriteString (line 157) | func (r *RuneBuffer) WriteString(s string) {
method WriteRune (line 161) | func (r *RuneBuffer) WriteRune(s rune) {
method WriteRunes (line 165) | func (r *RuneBuffer) WriteRunes(s []rune) {
method MoveForward (line 173) | func (r *RuneBuffer) MoveForward() {
method IsCursorInEnd (line 182) | func (r *RuneBuffer) IsCursorInEnd() bool {
method Replace (line 188) | func (r *RuneBuffer) Replace(ch rune) {
method Erase (line 194) | func (r *RuneBuffer) Erase() {
method Delete (line 202) | func (r *RuneBuffer) Delete() (success bool) {
method DeleteWord (line 214) | func (r *RuneBuffer) DeleteWord() {
method MoveToPrevWord (line 234) | func (r *RuneBuffer) MoveToPrevWord() (success bool) {
method KillFront (line 253) | func (r *RuneBuffer) KillFront() {
method Kill (line 267) | func (r *RuneBuffer) Kill() {
method Transpose (line 274) | func (r *RuneBuffer) Transpose() {
method MoveToNextWord (line 294) | func (r *RuneBuffer) MoveToNextWord() {
method MoveToEndWord (line 307) | func (r *RuneBuffer) MoveToEndWord() {
method BackEscapeWord (line 329) | func (r *RuneBuffer) BackEscapeWord() {
method Yank (line 348) | func (r *RuneBuffer) Yank() {
method Backspace (line 362) | func (r *RuneBuffer) Backspace() {
method MoveToLineEnd (line 373) | func (r *RuneBuffer) MoveToLineEnd() {
method LineCount (line 383) | func (r *RuneBuffer) LineCount(width int) int {
method MoveTo (line 391) | func (r *RuneBuffer) MoveTo(ch rune, prevChar, reverse bool) (success ...
method isInLineEdge (line 420) | func (r *RuneBuffer) isInLineEdge() bool {
method getSplitByLine (line 428) | func (r *RuneBuffer) getSplitByLine(rs []rune) []string {
method IdxLine (line 432) | func (r *RuneBuffer) IdxLine(width int) int {
method idxLine (line 438) | func (r *RuneBuffer) idxLine(width int) int {
method CursorLineCount (line 446) | func (r *RuneBuffer) CursorLineCount() int {
method Refresh (line 450) | func (r *RuneBuffer) Refresh(f func()) {
method SetOffset (line 468) | func (r *RuneBuffer) SetOffset(offset string) {
method print (line 474) | func (r *RuneBuffer) print() {
method output (line 479) | func (r *RuneBuffer) output() []byte {
method getBackspaceSequence (line 512) | func (r *RuneBuffer) getBackspaceSequence() []byte {
method Reset (line 542) | func (r *RuneBuffer) Reset() []rune {
method calWidth (line 549) | func (r *RuneBuffer) calWidth(m int) int {
method SetStyle (line 556) | func (r *RuneBuffer) SetStyle(start, end int, style string) {
method SetWithIdx (line 574) | func (r *RuneBuffer) SetWithIdx(idx int, buf []rune) {
method Set (line 581) | func (r *RuneBuffer) Set(buf []rune) {
method SetPrompt (line 585) | func (r *RuneBuffer) SetPrompt(prompt string) {
method cleanOutput (line 591) | func (r *RuneBuffer) cleanOutput(w io.Writer, idxLine int) {
method Clean (line 613) | func (r *RuneBuffer) Clean() {
method clean (line 619) | func (r *RuneBuffer) clean() {
method cleanWithIdxLine (line 623) | func (r *RuneBuffer) cleanWithIdxLine(idxLine int) {
function NewRuneBuffer (line 64) | func NewRuneBuffer(w io.Writer, prompt string, cfg *Config, width int) *...
FILE: vendor/github.com/chzyer/readline/runes.go
type Runes (line 12) | type Runes struct
method EqualRune (line 14) | func (Runes) EqualRune(a, b rune, fold bool) bool {
method EqualRuneFold (line 32) | func (r Runes) EqualRuneFold(a, b rune) bool {
method EqualFold (line 36) | func (r Runes) EqualFold(a, b []rune) bool {
method Equal (line 50) | func (Runes) Equal(a, b []rune) bool {
method IndexAllBckEx (line 62) | func (rs Runes) IndexAllBckEx(r, sub []rune, fold bool) int {
method IndexAllBck (line 79) | func (rs Runes) IndexAllBck(r, sub []rune) int {
method IndexAll (line 84) | func (rs Runes) IndexAll(r, sub []rune) int {
method IndexAllEx (line 88) | func (rs Runes) IndexAllEx(r, sub []rune, fold bool) int {
method Index (line 107) | func (Runes) Index(r rune, rs []rune) int {
method ColorFilter (line 116) | func (Runes) ColorFilter(r []rune) []rune {
method Width (line 146) | func (Runes) Width(r rune) int {
method WidthAll (line 159) | func (Runes) WidthAll(r []rune) (length int) {
method Backspace (line 166) | func (Runes) Backspace(r []rune) []byte {
method Copy (line 170) | func (Runes) Copy(r []rune) []rune {
method HasPrefixFold (line 176) | func (Runes) HasPrefixFold(r, prefix []rune) bool {
method HasPrefix (line 183) | func (Runes) HasPrefix(r, prefix []rune) bool {
method Aggregate (line 190) | func (Runes) Aggregate(candicate [][]rune) (same []rune, size int) {
method TrimSpaceLeft (line 214) | func (Runes) TrimSpaceLeft(in []rune) []rune {
FILE: vendor/github.com/chzyer/readline/search.go
constant S_STATE_FOUND (line 11) | S_STATE_FOUND = iota
constant S_STATE_FAILING (line 12) | S_STATE_FAILING
constant S_DIR_BCK (line 16) | S_DIR_BCK = iota
constant S_DIR_FWD (line 17) | S_DIR_FWD
type opSearch (line 20) | type opSearch struct
method OnWidthChange (line 45) | func (o *opSearch) OnWidthChange(newWidth int) {
method IsSearchMode (line 49) | func (o *opSearch) IsSearchMode() bool {
method SearchBackspace (line 53) | func (o *opSearch) SearchBackspace() {
method findHistoryBy (line 60) | func (o *opSearch) findHistoryBy(isNewSearch bool) (int, *list.Element) {
method search (line 67) | func (o *opSearch) search(isChange bool) bool {
method SearchChar (line 94) | func (o *opSearch) SearchChar(r rune) {
method SearchMode (line 99) | func (o *opSearch) SearchMode(dir int) bool {
method ExitSearchMode (line 115) | func (o *opSearch) ExitSearchMode(revert bool) {
method SearchRefresh (line 127) | func (o *opSearch) SearchRefresh(x int) {
function newOpSearch (line 35) | func newOpSearch(w io.Writer, buf *RuneBuffer, history *opHistory, cfg *...
FILE: vendor/github.com/chzyer/readline/std.go
function getInstance (line 22) | func getInstance() *Instance {
function SetHistoryPath (line 35) | func SetHistoryPath(fp string) {
function SetAutoComplete (line 43) | func SetAutoComplete(completer AutoCompleter) {
function AddHistory (line 52) | func AddHistory(content string) error {
function Password (line 57) | func Password(prompt string) ([]byte, error) {
function Line (line 63) | func Line(prompt string) (string, error) {
type CancelableStdin (line 69) | type CancelableStdin struct
method ioloop (line 90) | func (c *CancelableStdin) ioloop() {
method Read (line 107) | func (c *CancelableStdin) Read(b []byte) (n int, err error) {
method Close (line 128) | func (c *CancelableStdin) Close() error {
function NewCancelableStdin (line 80) | func NewCancelableStdin(r io.Reader) *CancelableStdin {
type FillableStdin (line 137) | type FillableStdin struct
method ioloop (line 156) | func (s *FillableStdin) ioloop() {
method Read (line 175) | func (s *FillableStdin) Read(p []byte) (n int, err error) {
method Close (line 194) | func (s *FillableStdin) Close() error {
function NewFillableStdin (line 146) | func NewFillableStdin(stdin io.Reader) (io.ReadCloser, io.Writer) {
FILE: vendor/github.com/chzyer/readline/std_windows.go
function init (line 5) | func init() {
FILE: vendor/github.com/chzyer/readline/term.go
type State (line 25) | type State struct
function IsTerminal (line 30) | func IsTerminal(fd int) bool {
function MakeRaw (line 38) | func MakeRaw(fd int) (*State, error) {
function GetState (line 64) | func GetState(fd int) (*State, error) {
function restoreTerm (line 75) | func restoreTerm(fd int, state *State) error {
function ReadPassword (line 82) | func ReadPassword(fd int) ([]byte, error) {
FILE: vendor/github.com/chzyer/readline/term_bsd.go
function getTermios (line 14) | func getTermios(fd int) (*Termios, error) {
function setTermios (line 23) | func setTermios(fd int, termios *Termios) error {
FILE: vendor/github.com/chzyer/readline/term_linux.go
constant ioctlReadTermios (line 15) | ioctlReadTermios = 0x5401
constant ioctlWriteTermios (line 16) | ioctlWriteTermios = 0x5402
function getTermios (line 18) | func getTermios(fd int) (*Termios, error) {
function setTermios (line 27) | func setTermios(fd int, termios *Termios) error {
FILE: vendor/github.com/chzyer/readline/term_solaris.go
function GetSize (line 12) | func GetSize(fd int) (int, int, error) {
type Termios (line 20) | type Termios
function getTermios (line 22) | func getTermios(fd int) (*Termios, error) {
function setTermios (line 30) | func setTermios(fd int, termios *Termios) error {
FILE: vendor/github.com/chzyer/readline/term_unix.go
type Termios (line 14) | type Termios
function GetSize (line 17) | func GetSize(fd int) (int, int, error) {
FILE: vendor/github.com/chzyer/readline/term_windows.go
constant enableLineInput (line 26) | enableLineInput = 2
constant enableEchoInput (line 27) | enableEchoInput = 4
constant enableProcessedInput (line 28) | enableProcessedInput = 1
constant enableWindowInput (line 29) | enableWindowInput = 8
constant enableMouseInput (line 30) | enableMouseInput = 16
constant enableInsertMode (line 31) | enableInsertMode = 32
constant enableQuickEditMode (line 32) | enableQuickEditMode = 64
constant enableExtendedFlags (line 33) | enableExtendedFlags = 128
constant enableAutoPosition (line 34) | enableAutoPosition = 256
constant enableProcessedOutput (line 35) | enableProcessedOutput = 1
constant enableWrapAtEolOutput (line 36) | enableWrapAtEolOutput = 2
type coord (line 48) | type coord struct
type smallRect (line 52) | type smallRect struct
type consoleScreenBufferInfo (line 58) | type consoleScreenBufferInfo struct
type State (line 67) | type State struct
function IsTerminal (line 72) | func IsTerminal(fd int) bool {
function MakeRaw (line 81) | func MakeRaw(fd int) (*State, error) {
function GetState (line 97) | func GetState(fd int) (*State, error) {
function restoreTerm (line 108) | func restoreTerm(fd int, state *State) error {
function GetSize (line 114) | func GetSize(fd int) (width, height int, err error) {
function ReadPassword (line 126) | func ReadPassword(fd int) ([]byte, error) {
FILE: vendor/github.com/chzyer/readline/terminal.go
type Terminal (line 12) | type Terminal struct
method SleepToResume (line 43) | func (t *Terminal) SleepToResume() {
method EnterRawMode (line 56) | func (t *Terminal) EnterRawMode() (err error) {
method ExitRawMode (line 60) | func (t *Terminal) ExitRawMode() (err error) {
method Write (line 64) | func (t *Terminal) Write(b []byte) (int, error) {
method WriteStdin (line 70) | func (t *Terminal) WriteStdin(b []byte) (int, error) {
method GetOffset (line 79) | func (t *Terminal) GetOffset(f func(offset string)) {
method Print (line 86) | func (t *Terminal) Print(s string) {
method PrintRune (line 90) | func (t *Terminal) PrintRune(r rune) {
method Readline (line 94) | func (t *Terminal) Readline() *Operation {
method ReadRune (line 99) | func (t *Terminal) ReadRune() rune {
method IsReading (line 107) | func (t *Terminal) IsReading() bool {
method KickRead (line 111) | func (t *Terminal) KickRead() {
method ioloop (line 118) | func (t *Terminal) ioloop() {
method Bell (line 200) | func (t *Terminal) Bell() {
method Close (line 204) | func (t *Terminal) Close() error {
method GetConfig (line 216) | func (t *Terminal) GetConfig() *Config {
method getStdin (line 223) | func (t *Terminal) getStdin() io.Reader {
method SetConfig (line 230) | func (t *Terminal) SetConfig(c *Config) error {
function NewTerminal (line 26) | func NewTerminal(cfg *Config) (*Terminal, error) {
type termSize (line 74) | type termSize struct
FILE: vendor/github.com/chzyer/readline/utils.go
constant CharLineStart (line 21) | CharLineStart = 1
constant CharBackward (line 22) | CharBackward = 2
constant CharInterrupt (line 23) | CharInterrupt = 3
constant CharDelete (line 24) | CharDelete = 4
constant CharLineEnd (line 25) | CharLineEnd = 5
constant CharForward (line 26) | CharForward = 6
constant CharBell (line 27) | CharBell = 7
constant CharCtrlH (line 28) | CharCtrlH = 8
constant CharTab (line 29) | CharTab = 9
constant CharCtrlJ (line 30) | CharCtrlJ = 10
constant CharKill (line 31) | CharKill = 11
constant CharCtrlL (line 32) | CharCtrlL = 12
constant CharEnter (line 33) | CharEnter = 13
constant CharNext (line 34) | CharNext = 14
constant CharPrev (line 35) | CharPrev = 16
constant CharBckSearch (line 36) | CharBckSearch = 18
constant CharFwdSearch (line 37) | CharFwdSearch = 19
constant CharTranspose (line 38) | CharTranspose = 20
constant CharCtrlU (line 39) | CharCtrlU = 21
constant CharCtrlW (line 40) | CharCtrlW = 23
constant CharCtrlY (line 41) | CharCtrlY = 25
constant CharCtrlZ (line 42) | CharCtrlZ = 26
constant CharEsc (line 43) | CharEsc = 27
constant CharEscapeEx (line 44) | CharEscapeEx = 91
constant CharBackspace (line 45) | CharBackspace = 127
constant MetaBackward (line 49) | MetaBackward rune = -iota - 1
constant MetaForward (line 50) | MetaForward
constant MetaDelete (line 51) | MetaDelete
constant MetaBackspace (line 52) | MetaBackspace
constant MetaTranspose (line 53) | MetaTranspose
function WaitForResume (line 59) | func WaitForResume() chan struct{} {
function Restore (line 81) | func Restore(fd int, state *State) error {
function IsPrintable (line 94) | func IsPrintable(key rune) bool {
function escapeExKey (line 100) | func escapeExKey(key *escapeKeyPair) rune {
type escapeKeyPair (line 124) | type escapeKeyPair struct
method Get2 (line 129) | func (e *escapeKeyPair) Get2() (int, int, bool) {
function readEscKey (line 145) | func readEscKey(r rune, reader *bufio.Reader) *escapeKeyPair {
function escapeKey (line 163) | func escapeKey(r rune, reader *bufio.Reader) rune {
function SplitByLine (line 191) | func SplitByLine(start, screenWidth int, rs []rune) []string {
function LineCount (line 210) | func LineCount(screenWidth, w int) int {
function IsWordBreak (line 218) | func IsWordBreak(i rune) bool {
function GetInt (line 229) | func GetInt(s []string, def int) int {
type RawMode (line 240) | type RawMode struct
method Enter (line 244) | func (r *RawMode) Enter() (err error) {
method Exit (line 249) | func (r *RawMode) Exit() error {
function sleep (line 258) | func sleep(n int) {
function debugList (line 264) | func debugList(l *list.List) {
function Debug (line 273) | func Debug(o ...interface{}) {
FILE: vendor/github.com/chzyer/readline/utils_unix.go
type winsize (line 13) | type winsize struct
function SuspendMe (line 23) | func SuspendMe() {
function getWidth (line 31) | func getWidth(stdoutFd int) int {
function GetScreenWidth (line 39) | func GetScreenWidth() int {
function ClearScreen (line 48) | func ClearScreen(w io.Writer) (int, error) {
function DefaultIsTerminal (line 52) | func DefaultIsTerminal() bool {
function GetStdin (line 56) | func GetStdin() int {
function DefaultOnWidthChanged (line 67) | func DefaultOnWidthChanged(f func()) {
FILE: vendor/github.com/chzyer/readline/utils_windows.go
function SuspendMe (line 10) | func SuspendMe() {
function GetStdin (line 13) | func GetStdin() int {
function init (line 17) | func init() {
function GetScreenWidth (line 22) | func GetScreenWidth() int {
function ClearScreen (line 31) | func ClearScreen(_ io.Writer) error {
function DefaultIsTerminal (line 35) | func DefaultIsTerminal() bool {
function DefaultOnWidthChanged (line 39) | func DefaultOnWidthChanged(func()) {
FILE: vendor/github.com/chzyer/readline/vim.go
constant VIM_NORMAL (line 4) | VIM_NORMAL = iota
constant VIM_INSERT (line 5) | VIM_INSERT
constant VIM_VISUAL (line 6) | VIM_VISUAL
type opVim (line 9) | type opVim struct
method SetVimMode (line 24) | func (o *opVim) SetVimMode(on bool) {
method ExitVimMode (line 32) | func (o *opVim) ExitVimMode() {
method IsEnableVimMode (line 36) | func (o *opVim) IsEnableVimMode() bool {
method handleVimNormalMovement (line 40) | func (o *opVim) handleVimNormalMovement(r rune, readNext func() rune) ...
method handleVimNormalEnterInsert (line 98) | func (o *opVim) handleVimNormalEnterInsert(r rune, readNext func() run...
method HandleVimNormal (line 133) | func (o *opVim) HandleVimNormal(r rune, readNext func() rune) (t rune) {
method EnterVimInsertMode (line 153) | func (o *opVim) EnterVimInsertMode() {
method ExitVimInsertMode (line 157) | func (o *opVim) ExitVimInsertMode() {
method HandleVim (line 161) | func (o *opVim) HandleVim(r rune, readNext func() rune) rune {
function newVimMode (line 15) | func newVimMode(op *Operation) *opVim {
FILE: vendor/github.com/chzyer/readline/windows_api.go
type Kernel (line 17) | type Kernel struct
method Wrap (line 105) | func (k *Kernel) Wrap(p *syscall.LazyProc) CallFunc {
type short (line 28) | type short
type word (line 29) | type word
type dword (line 30) | type dword
type wchar (line 31) | type wchar
type _COORD (line 33) | type _COORD struct
method ptr (line 38) | func (c *_COORD) ptr() uintptr {
constant EVENT_KEY (line 43) | EVENT_KEY = 0x0001
constant EVENT_MOUSE (line 44) | EVENT_MOUSE = 0x0002
constant EVENT_WINDOW_BUFFER_SIZE (line 45) | EVENT_WINDOW_BUFFER_SIZE = 0x0004
constant EVENT_MENU (line 46) | EVENT_MENU = 0x0008
constant EVENT_FOCUS (line 47) | EVENT_FOCUS = 0x0010
type _KEY_EVENT_RECORD (line 50) | type _KEY_EVENT_RECORD struct
type _INPUT_RECORD (line 64) | type _INPUT_RECORD struct
type _CONSOLE_SCREEN_BUFFER_INFO (line 70) | type _CONSOLE_SCREEN_BUFFER_INFO struct
type _SMALL_RECT (line 78) | type _SMALL_RECT struct
type _CONSOLE_CURSOR_INFO (line 85) | type _CONSOLE_CURSOR_INFO struct
type CallFunc (line 90) | type CallFunc
function NewKernel (line 92) | func NewKernel() *Kernel {
function GetConsoleScreenBufferInfo (line 135) | func GetConsoleScreenBufferInfo() (*_CONSOLE_SCREEN_BUFFER_INFO, error) {
function GetConsoleCursorInfo (line 144) | func GetConsoleCursorInfo() (*_CONSOLE_CURSOR_INFO, error) {
function SetConsoleCursorPosition (line 150) | func SetConsoleCursorPosition(c *_COORD) error {
FILE: vendor/github.com/fatih/color/color.go
function noColorExists (line 39) | func noColorExists() bool {
type Color (line 45) | type Color struct
method Set (line 150) | func (c *Color) Set() *Color {
method unset (line 159) | func (c *Color) unset() {
method setWriter (line 167) | func (c *Color) setWriter(w io.Writer) *Color {
method unsetWriter (line 176) | func (c *Color) unsetWriter(w io.Writer) {
method Add (line 190) | func (c *Color) Add(value ...Attribute) *Color {
method prepend (line 195) | func (c *Color) prepend(value Attribute) {
method Fprint (line 206) | func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err erro...
method Print (line 218) | func (c *Color) Print(a ...interface{}) (n int, err error) {
method Fprintf (line 229) | func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) ...
method Printf (line 239) | func (c *Color) Printf(format string, a ...interface{}) (n int, err er...
method Fprintln (line 250) | func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err er...
method Println (line 262) | func (c *Color) Println(a ...interface{}) (n int, err error) {
method Sprint (line 270) | func (c *Color) Sprint(a ...interface{}) string {
method Sprintln (line 275) | func (c *Color) Sprintln(a ...interface{}) string {
method Sprintf (line 280) | func (c *Color) Sprintf(format string, a ...interface{}) string {
method FprintFunc (line 286) | func (c *Color) FprintFunc() func(w io.Writer, a ...interface{}) {
method PrintFunc (line 294) | func (c *Color) PrintFunc() func(a ...interface{}) {
method FprintfFunc (line 302) | func (c *Color) FprintfFunc() func(w io.Writer, format string, a ...in...
method PrintfFunc (line 310) | func (c *Color) PrintfFunc() func(format string, a ...interface{}) {
method FprintlnFunc (line 318) | func (c *Color) FprintlnFunc() func(w io.Writer, a ...interface{}) {
method PrintlnFunc (line 326) | func (c *Color) PrintlnFunc() func(a ...interface{}) {
method SprintFunc (line 338) | func (c *Color) SprintFunc() func(a ...interface{}) string {
method SprintfFunc (line 347) | func (c *Color) SprintfFunc() func(format string, a ...interface{}) st...
method SprintlnFunc (line 356) | func (c *Color) SprintlnFunc() func(a ...interface{}) string {
method sequence (line 364) | func (c *Color) sequence() string {
method wrap (line 375) | func (c *Color) wrap(s string) string {
method format (line 383) | func (c *Color) format() string {
method unformat (line 387) | func (c *Color) unformat() string {
method DisableColor (line 394) | func (c *Color) DisableColor() {
method EnableColor (line 400) | func (c *Color) EnableColor() {
method isNoColorSet (line 404) | func (c *Color) isNoColorSet() bool {
method Equals (line 415) | func (c *Color) Equals(c2 *Color) bool {
method attrExists (line 429) | func (c *Color) attrExists(a Attribute) bool {
type Attribute (line 51) | type Attribute
constant escape (line 53) | escape = "\x1b"
constant Reset (line 57) | Reset Attribute = iota
constant Bold (line 58) | Bold
constant Faint (line 59) | Faint
constant Italic (line 60) | Italic
constant Underline (line 61) | Underline
constant BlinkSlow (line 62) | BlinkSlow
constant BlinkRapid (line 63) | BlinkRapid
constant ReverseVideo (line 64) | ReverseVideo
constant Concealed (line 65) | Concealed
constant CrossedOut (line 66) | CrossedOut
constant FgBlack (line 71) | FgBlack Attribute = iota + 30
constant FgRed (line 72) | FgRed
constant FgGreen (line 73) | FgGreen
constant FgYellow (line 74) | FgYellow
constant FgBlue (line 75) | FgBlue
constant FgMagenta (line 76) | FgMagenta
constant FgCyan (line 77) | FgCyan
constant FgWhite (line 78) | FgWhite
constant FgHiBlack (line 83) | FgHiBlack Attribute = iota + 90
constant FgHiRed (line 84) | FgHiRed
constant FgHiGreen (line 85) | FgHiGreen
constant FgHiYellow (line 86) | FgHiYellow
constant FgHiBlue (line 87) | FgHiBlue
constant FgHiMagenta (line 88) | FgHiMagenta
constant FgHiCyan (line 89) | FgHiCyan
constant FgHiWhite (line 90) | FgHiWhite
constant BgBlack (line 95) | BgBlack Attribute = iota + 40
constant BgRed (line 96) | BgRed
constant BgGreen (line 97) | BgGreen
constant BgYellow (line 98) | BgYellow
constant BgBlue (line 99) | BgBlue
constant BgMagenta (line 100) | BgMagenta
constant BgCyan (line 101) | BgCyan
constant BgWhite (line 102) | BgWhite
constant BgHiBlack (line 107) | BgHiBlack Attribute = iota + 100
constant BgHiRed (line 108) | BgHiRed
constant BgHiGreen (line 109) | BgHiGreen
constant BgHiYellow (line 110) | BgHiYellow
constant BgHiBlue (line 111) | BgHiBlue
constant BgHiMagenta (line 112) | BgHiMagenta
constant BgHiCyan (line 113) | BgHiCyan
constant BgHiWhite (line 114) | BgHiWhite
function New (line 118) | func New(value ...Attribute) *Color {
function Set (line 133) | func Set(p ...Attribute) *Color {
function Unset (line 141) | func Unset() {
function boolPtr (line 439) | func boolPtr(v bool) *bool {
function getCachedColor (line 443) | func getCachedColor(p Attribute) *Color {
function colorPrint (line 456) | func colorPrint(format string, p Attribute, a ...interface{}) {
function colorString (line 470) | func colorString(format string, p Attribute, a ...interface{}) string {
function Black (line 482) | func Black(format string, a ...interface{}) { colorPrint(format, FgBlack...
function Red (line 486) | func Red(format string, a ...interface{}) { colorPrint(format, FgRed, a....
function Green (line 490) | func Green(format string, a ...interface{}) { colorPrint(format, FgGreen...
function Yellow (line 494) | func Yellow(format string, a ...interface{}) { colorPrint(format, FgYell...
function Blue (line 498) | func Blue(format string, a ...interface{}) { colorPrint(format, FgBlue, ...
function Magenta (line 502) | func Magenta(format string, a ...interface{}) { colorPrint(format, FgMag...
function Cyan (line 506) | func Cyan(format string, a ...interface{}) { colorPrint(format, FgCyan, ...
function White (line 510) | func White(format string, a ...interface{}) { colorPrint(format, FgWhite...
function BlackString (line 514) | func BlackString(format string, a ...interface{}) string { return colorS...
function RedString (line 518) | func RedString(format string, a ...interface{}) string { return colorStr...
function GreenString (line 522) | func GreenString(format string, a ...interface{}) string { return colorS...
function YellowString (line 526) | func YellowString(format string, a ...interface{}) string { return color...
function BlueString (line 530) | func BlueString(format string, a ...interface{}) string { return colorSt...
function MagentaString (line 534) | func MagentaString(format string, a ...interface{}) string {
function CyanString (line 540) | func CyanString(format string, a ...interface{}) string { return colorSt...
function WhiteString (line 544) | func WhiteString(format string, a ...interface{}) string { return colorS...
function HiBlack (line 548) | func HiBlack(format string, a ...interface{}) { colorPrint(format, FgHiB...
function HiRed (line 552) | func HiRed(format string, a ...interface{}) { colorPrint(format, FgHiRed...
function HiGreen (line 556) | func HiGreen(format string, a ...interface{}) { colorPrint(format, FgHiG...
function HiYellow (line 560) | func HiYellow(format string, a ...interface{}) { colorPrint(format, FgHi...
function HiBlue (line 564) | func HiBlue(format string, a ...interface{}) { colorPrint(format, FgHiBl...
function HiMagenta (line 568) | func HiMagenta(format string, a ...interface{}) { colorPrint(format, FgH...
function HiCyan (line 572) | func HiCyan(format string, a ...interface{}) { colorPrint(format, FgHiCy...
function HiWhite (line 576) | func HiWhite(format string, a ...interface{}) { colorPrint(format, FgHiW...
function HiBlackString (line 580) | func HiBlackString(format string, a ...interface{}) string {
function HiRedString (line 586) | func HiRedString(format string, a ...interface{}) string { return colorS...
function HiGreenString (line 590) | func HiGreenString(format string, a ...interface{}) string {
function HiYellowString (line 596) | func HiYellowString(format string, a ...interface{}) string {
function HiBlueString (line 602) | func HiBlueString(format string, a ...interface{}) string { return color...
function HiMagentaString (line 606) | func HiMagentaString(format string, a ...interface{}) string {
function HiCyanString (line 612) | func HiCyanString(format string, a ...interface{}) string { return color...
function HiWhiteString (line 616) | func HiWhiteString(format string, a ...interface{}) string {
FILE: vendor/github.com/iancoleman/strcase/acronyms.go
function ConfigureAcronym (line 8) | func ConfigureAcronym(key, val string) {
FILE: vendor/github.com/iancoleman/strcase/camel.go
function toCamelInitCase (line 33) | func toCamelInitCase(s string, initCase bool) string {
function ToCamel (line 73) | func ToCamel(s string) string {
function ToLowerCamel (line 78) | func ToLowerCamel(s string) string {
FILE: vendor/github.com/iancoleman/strcase/snake.go
function ToSnake (line 33) | func ToSnake(s string) string {
function ToSnakeWithIgnore (line 37) | func ToSnakeWithIgnore(s string, ignore string) string {
function ToScreamingSnake (line 42) | func ToScreamingSnake(s string) string {
function ToKebab (line 47) | func ToKebab(s string) string {
function ToScreamingKebab (line 52) | func ToScreamingKebab(s string) string {
function ToDelimited (line 58) | func ToDelimited(s string, delimiter uint8) string {
function ToScreamingDelimited (line 66) | func ToScreamingDelimited(s string, delimiter uint8, ignore string, scre...
FILE: vendor/github.com/inconshreveable/mousetrap/trap_others.go
function StartedByExplorer (line 13) | func StartedByExplorer() bool {
FILE: vendor/github.com/inconshreveable/mousetrap/trap_windows.go
constant th32cs_snapprocess (line 15) | th32cs_snapprocess uintptr = 0x2
type processEntry32 (line 26) | type processEntry32 struct
function getProcessEntry (line 39) | func getProcessEntry(pid int) (pe *processEntry32, err error) {
function getppid (line 69) | func getppid() (pid int, err error) {
function StartedByExplorer (line 85) | func StartedByExplorer() bool {
FILE: vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go
function getProcessEntry (line 12) | func getProcessEntry(pid int) (*syscall.ProcessEntry32, error) {
function StartedByExplorer (line 40) | func StartedByExplorer() bool {
FILE: vendor/github.com/mattn/go-colorable/colorable_appengine.go
function NewColorable (line 13) | func NewColorable(file *os.File) io.Writer {
function NewColorableStdout (line 22) | func NewColorableStdout() io.Writer {
function NewColorableStderr (line 27) | func NewColorableStderr() io.Writer {
function EnableColorsStdout (line 32) | func EnableColorsStdout(enabled *bool) func() {
FILE: vendor/github.com/mattn/go-colorable/colorable_others.go
function NewColorable (line 14) | func NewColorable(file *os.File) io.Writer {
function NewColorableStdout (line 23) | func NewColorableStdout() io.Writer {
function NewColorableStderr (line 28) | func NewColorableStderr() io.Writer {
function EnableColorsStdout (line 33) | func EnableColorsStdout(enabled *bool) func() {
FILE: vendor/github.com/mattn/go-colorable/colorable_windows.go
constant foregroundBlue (line 21) | foregroundBlue = 0x1
constant foregroundGreen (line 22) | foregroundGreen = 0x2
constant foregroundRed (line 23) | foregroundRed = 0x4
constant foregroundIntensity (line 24) | foregroundIntensity = 0x8
constant foregroundMask (line 25) | foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen ...
constant backgroundBlue (line 26) | backgroundBlue = 0x10
constant backgroundGreen (line 27) | backgroundGreen = 0x20
constant backgroundRed (line 28) | backgroundRed = 0x40
constant backgroundIntensity (line 29) | backgroundIntensity = 0x80
constant backgroundMask (line 30) | backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen ...
constant commonLvbUnderscore (line 31) | commonLvbUnderscore = 0x8000
constant cENABLE_VIRTUAL_TERMINAL_PROCESSING (line 33) | cENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4
constant genericRead (line 37) | genericRead = 0x80000000
constant genericWrite (line 38) | genericWrite = 0x40000000
constant consoleTextmodeBuffer (line 42) | consoleTextmodeBuffer = 0x1
type wchar (line 45) | type wchar
type short (line 46) | type short
type dword (line 47) | type dword
type word (line 48) | type word
type coord (line 50) | type coord struct
type smallRect (line 55) | type smallRect struct
type consoleScreenBufferInfo (line 62) | type consoleScreenBufferInfo struct
type consoleCursorInfo (line 70) | type consoleCursorInfo struct
type Writer (line 91) | type Writer struct
method Write (line 437) | func (w *Writer) Write(data []byte) (n int, err error) {
function NewColorable (line 102) | func NewColorable(file *os.File) io.Writer {
function NewColorableStdout (line 121) | func NewColorableStdout() io.Writer {
function NewColorableStderr (line 126) | func NewColorableStderr() io.Writer {
function doTitleSequence (line 390) | func doTitleSequence(er *bytes.Reader) error {
function atoiWithDefault (line 429) | func atoiWithDefault(s string, def int) (int, error) {
type consoleColor (line 865) | type consoleColor struct
method foregroundAttr (line 873) | func (c consoleColor) foregroundAttr() (attr word) {
method backgroundAttr (line 889) | func (c consoleColor) backgroundAttr() (attr word) {
type hsv (line 924) | type hsv struct
method dist (line 928) | func (a hsv) dist(b hsv) float32 {
function toHSV (line 941) | func toHSV(rgb int) hsv {
type hsvTable (line 968) | type hsvTable
method find (line 978) | func (t hsvTable) find(rgb int) consoleColor {
function toHSVTable (line 970) | func toHSVTable(rgbTable []consoleColor) hsvTable {
function minmax3f (line 991) | func minmax3f(a, b, c float32) (min, max float32) {
function n256setup (line 1014) | func n256setup() {
function EnableColorsStdout (line 1026) | func EnableColorsStdout(enabled *bool) func() {
FILE: vendor/github.com/mattn/go-colorable/noncolorable.go
type NonColorable (line 9) | type NonColorable struct
method Write (line 19) | func (w *NonColorable) Write(data []byte) (n int, err error) {
function NewNonColorable (line 14) | func NewNonColorable(w io.Writer) io.Writer {
FILE: vendor/github.com/mattn/go-isatty/isatty_bsd.go
function IsTerminal (line 10) | func IsTerminal(fd uintptr) bool {
function IsCygwinTerminal (line 17) | func IsCygwinTerminal(fd uintptr) bool {
FILE: vendor/github.com/mattn/go-isatty/isatty_others.go
function IsTerminal (line 8) | func IsTerminal(fd uintptr) bool {
function IsCygwinTerminal (line 14) | func IsCygwinTerminal(fd uintptr) bool {
FILE: vendor/github.com/mattn/go-isatty/isatty_plan9.go
function IsTerminal (line 11) | func IsTerminal(fd uintptr) bool {
function IsCygwinTerminal (line 21) | func IsCygwinTerminal(fd uintptr) bool {
FILE: vendor/github.com/mattn/go-isatty/isatty_solaris.go
function IsTerminal (line 12) | func IsTerminal(fd uintptr) bool {
function IsCygwinTerminal (line 19) | func IsCygwinTerminal(fd uintptr) bool {
FILE: vendor/github.com/mattn/go-isatty/isatty_tcgets.go
function IsTerminal (line 10) | func IsTerminal(fd uintptr) bool {
function IsCygwinTerminal (line 17) | func IsCygwinTerminal(fd uintptr) bool {
FILE: vendor/github.com/mattn/go-isatty/isatty_windows.go
constant objectNameInfo (line 15) | objectNameInfo uintptr = 1
constant fileNameInfo (line 16) | fileNameInfo = 2
constant fileTypePipe (line 17) | fileTypePipe = 3
function init (line 29) | func init() {
function IsTerminal (line 37) | func IsTerminal(fd uintptr) bool {
function isCygwinPipeName (line 46) | func isCygwinPipeName(name string) bool {
function getFileNameByHandle (line 83) | func getFileNameByHandle(fd uintptr) (string, error) {
function IsCygwinTerminal (line 100) | func IsCygwinTerminal(fd uintptr) bool {
FILE: vendor/github.com/spf13/cobra/args.go
type PositionalArgs (line 8) | type PositionalArgs
function legacyArgs (line 14) | func legacyArgs(cmd *Command, args []string) error {
function NoArgs (line 28) | func NoArgs(cmd *Command, args []string) error {
function OnlyValidArgs (line 36) | func OnlyValidArgs(cmd *Command, args []string) error {
function ArbitraryArgs (line 55) | func ArbitraryArgs(cmd *Command, args []string) error {
function MinimumNArgs (line 60) | func MinimumNArgs(n int) PositionalArgs {
function MaximumNArgs (line 70) | func MaximumNArgs(n int) PositionalArgs {
function ExactArgs (line 80) | func ExactArgs(n int) PositionalArgs {
function ExactValidArgs (line 92) | func ExactValidArgs(n int) PositionalArgs {
function RangeArgs (line 102) | func RangeArgs(min int, max int) PositionalArgs {
function MatchAll (line 112) | func MatchAll(pargs ...PositionalArgs) PositionalArgs {
FILE: vendor/github.com/spf13/cobra/bash_completions.go
constant BashCompFilenameExt (line 16) | BashCompFilenameExt = "cobra_annotation_bash_completion_filename_ext...
constant BashCompCustom (line 17) | BashCompCustom = "cobra_annotation_bash_completion_custom"
constant BashCompOneRequiredFlag (line 18) | BashCompOneRequiredFlag = "cobra_annotation_bash_completion_one_required...
constant BashCompSubdirsInDir (line 19) | BashCompSubdirsInDir = "cobra_annotation_bash_completion_subdirs_in_dir"
function writePreamble (line 22) | func writePreamble(buf io.StringWriter, name string) {
function writePostscript (line 389) | func writePostscript(buf io.StringWriter, name string) {
function writeCommands (line 432) | func writeCommands(buf io.StringWriter, cmd *Command) {
function writeFlagHandler (line 444) | func writeFlagHandler(buf io.StringWriter, name string, annotations map[...
constant cbn (line 480) | cbn = "\")\n"
function writeShortFlag (line 482) | func writeShortFlag(buf io.StringWriter, flag *pflag.Flag, cmd *Command) {
function writeFlag (line 493) | func writeFlag(buf io.StringWriter, flag *pflag.Flag, cmd *Command) {
function writeLocalNonPersistentFlag (line 508) | func writeLocalNonPersistentFlag(buf io.StringWriter, flag *pflag.Flag) {
function prepareCustomAnnotationsForFlags (line 521) | func prepareCustomAnnotationsForFlags(cmd *Command) {
function writeFlags (line 536) | func writeFlags(buf io.StringWriter, cmd *Command) {
function writeRequiredFlag (line 578) | func writeRequiredFlag(buf io.StringWriter, cmd *Command) {
function writeRequiredNouns (line 603) | func writeRequiredNouns(buf io.StringWriter, cmd *Command) {
function writeCmdAliases (line 617) | func writeCmdAliases(buf io.StringWriter, cmd *Command) {
function writeArgAliases (line 632) | func writeArgAliases(buf io.StringWriter, cmd *Command) {
function gen (line 640) | func gen(buf io.StringWriter, cmd *Command) {
method GenBashCompletion (line 671) | func (c *Command) GenBashCompletion(w io.Writer) error {
function nonCompletableFlag (line 684) | func nonCompletableFlag(flag *pflag.Flag) bool {
method GenBashCompletionFile (line 689) | func (c *Command) GenBashCompletionFile(filename string) error {
FILE: vendor/github.com/spf13/cobra/bash_completionsV2.go
method genBashCompletion (line 10) | func (c *Command) genBashCompletion(w io.Writer, includeDesc bool) error {
function genBashComp (line 17) | func genBashComp(buf io.StringWriter, name string, includeDesc bool) {
method GenBashCompletionFileV2 (line 317) | func (c *Command) GenBashCompletionFileV2(filename string, includeDesc b...
method GenBashCompletionV2 (line 329) | func (c *Command) GenBashCompletionV2(w io.Writer, includeDesc bool) err...
FILE: vendor/github.com/spf13/cobra/cobra.go
function AddTemplateFunc (line 69) | func AddTemplateFunc(name string, tmplFunc interface{}) {
function AddTemplateFuncs (line 75) | func AddTemplateFuncs(tmplFuncs template.FuncMap) {
function OnInitialize (line 83) | func OnInitialize(y ...func()) {
function Gt (line 92) | func Gt(a interface{}, b interface{}) bool {
function Eq (line 122) | func Eq(a interface{}, b interface{}) bool {
function trimRightSpace (line 137) | func trimRightSpace(s string) string {
function appendIfNotPresent (line 144) | func appendIfNotPresent(s, stringToAppend string) string {
function rpad (line 152) | func rpad(s string, padding int) string {
function tmpl (line 158) | func tmpl(w io.Writer, text string, data interface{}) error {
function ld (line 166) | func ld(s, t string, ignoreCase bool) int {
function stringInSlice (line 201) | func stringInSlice(a string, list []string) bool {
function CheckErr (line 211) | func CheckErr(msg interface{}) {
function WriteStringAndCheck (line 219) | func WriteStringAndCheck(b io.StringWriter, s string) {
FILE: vendor/github.com/spf13/cobra/command.go
type FParseErrWhitelist (line 32) | type FParseErrWhitelist
type Command (line 38) | type Command struct
method Context (line 229) | func (c *Command) Context() context.Context {
method SetArgs (line 235) | func (c *Command) SetArgs(a []string) {
method SetOutput (line 242) | func (c *Command) SetOutput(output io.Writer) {
method SetOut (line 249) | func (c *Command) SetOut(newOut io.Writer) {
method SetErr (line 255) | func (c *Command) SetErr(newErr io.Writer) {
method SetIn (line 261) | func (c *Command) SetIn(newIn io.Reader) {
method SetUsageFunc (line 266) | func (c *Command) SetUsageFunc(f func(*Command) error) {
method SetUsageTemplate (line 271) | func (c *Command) SetUsageTemplate(s string) {
method SetFlagErrorFunc (line 277) | func (c *Command) SetFlagErrorFunc(f func(*Command, error) error) {
method SetHelpFunc (line 282) | func (c *Command) SetHelpFunc(f func(*Command, []string)) {
method SetHelpCommand (line 287) | func (c *Command) SetHelpCommand(cmd *Command) {
method SetHelpTemplate (line 292) | func (c *Command) SetHelpTemplate(s string) {
method SetVersionTemplate (line 297) | func (c *Command) SetVersionTemplate(s string) {
method SetGlobalNormalizationFunc (line 303) | func (c *Command) SetGlobalNormalizationFunc(n func(f *flag.FlagSet, n...
method OutOrStdout (line 314) | func (c *Command) OutOrStdout() io.Writer {
method OutOrStderr (line 319) | func (c *Command) OutOrStderr() io.Writer {
method ErrOrStderr (line 324) | func (c *Command) ErrOrStderr() io.Writer {
method InOrStdin (line 329) | func (c *Command) InOrStdin() io.Reader {
method getOut (line 333) | func (c *Command) getOut(def io.Writer) io.Writer {
method getErr (line 343) | func (c *Command) getErr(def io.Writer) io.Writer {
method getIn (line 353) | func (c *Command) getIn(def io.Reader) io.Reader {
method UsageFunc (line 365) | func (c *Command) UsageFunc() (f func(*Command) error) {
method Usage (line 385) | func (c *Command) Usage() error {
method HelpFunc (line 391) | func (c *Command) HelpFunc() func(*Command, []string) {
method Help (line 412) | func (c *Command) Help() error {
method UsageString (line 418) | func (c *Command) UsageString() string {
method FlagErrorFunc (line 439) | func (c *Command) FlagErrorFunc() (f func(*Command, error) error) {
method UsagePadding (line 455) | func (c *Command) UsagePadding() int {
method CommandPathPadding (line 465) | func (c *Command) CommandPathPadding() int {
method NamePadding (line 475) | func (c *Command) NamePadding() int {
method UsageTemplate (line 483) | func (c *Command) UsageTemplate() string {
method HelpTemplate (line 518) | func (c *Command) HelpTemplate() string {
method VersionTemplate (line 532) | func (c *Command) VersionTemplate() string {
method Find (line 623) | func (c *Command) Find(args []string) (*Command, []string, error) {
method findSuggestions (line 647) | func (c *Command) findSuggestions(arg string) string {
method findNext (line 664) | func (c *Command) findNext(next string) *Command {
method Traverse (line 685) | func (c *Command) Traverse(args []string) (*Command, []string, error) {
method SuggestionsFor (line 727) | func (c *Command) SuggestionsFor(typedName string) []string {
method VisitParents (line 748) | func (c *Command) VisitParents(fn func(*Command)) {
method Root (line 756) | func (c *Command) Root() *Command {
method ArgsLenAtDash (line 765) | func (c *Command) ArgsLenAtDash() int {
method execute (line 769) | func (c *Command) execute(a []string) (err error) {
method preRun (line 884) | func (c *Command) preRun() {
method ExecuteContext (line 893) | func (c *Command) ExecuteContext(ctx context.Context) error {
method Execute (line 901) | func (c *Command) Execute() error {
method ExecuteContextC (line 909) | func (c *Command) ExecuteContextC(ctx context.Context) (*Command, erro...
method ExecuteC (line 915) | func (c *Command) ExecuteC() (cmd *Command, err error) {
method ValidateArgs (line 998) | func (c *Command) ValidateArgs(args []string) error {
method validateRequiredFlags (line 1005) | func (c *Command) validateRequiredFlags() error {
method InitDefaultHelpFlag (line 1031) | func (c *Command) InitDefaultHelpFlag() {
method InitDefaultVersionFlag (line 1048) | func (c *Command) InitDefaultVersionFlag() {
method InitDefaultHelpCmd (line 1072) | func (c *Command) InitDefaultHelpCmd() {
method ResetCommands (line 1119) | func (c *Command) ResetCommands() {
method Commands (line 1134) | func (c *Command) Commands() []*Command {
method AddCommand (line 1144) | func (c *Command) AddCommand(cmds ...*Command) {
method RemoveCommand (line 1173) | func (c *Command) RemoveCommand(cmds ...*Command) {
method Print (line 1207) | func (c *Command) Print(i ...interface{}) {
method Println (line 1212) | func (c *Command) Println(i ...interface{}) {
method Printf (line 1217) | func (c *Command) Printf(format string, i ...interface{}) {
method PrintErr (line 1222) | func (c *Command) PrintErr(i ...interface{}) {
method PrintErrln (line 1227) | func (c *Command) PrintErrln(i ...interface{}) {
method PrintErrf (line 1232) | func (c *Command) PrintErrf(format string, i ...interface{}) {
method CommandPath (line 1237) | func (c *Command) CommandPath() string {
method UseLine (line 1245) | func (c *Command) UseLine() string {
method DebugFlags (line 1263) | func (c *Command) DebugFlags() {
method Name (line 1303) | func (c *Command) Name() string {
method HasAlias (line 1313) | func (c *Command) HasAlias(s string) bool {
method CalledAs (line 1324) | func (c *Command) CalledAs() string {
method hasNameOrAliasPrefix (line 1333) | func (c *Command) hasNameOrAliasPrefix(prefix string) bool {
method NameAndAliases (line 1348) | func (c *Command) NameAndAliases() string {
method HasExample (line 1353) | func (c *Command) HasExample() bool {
method Runnable (line 1358) | func (c *Command) Runnable() bool {
method HasSubCommands (line 1363) | func (c *Command) HasSubCommands() bool {
method IsAvailableCommand (line 1369) | func (c *Command) IsAvailableCommand() bool {
method IsAdditionalHelpTopicCommand (line 1390) | func (c *Command) IsAdditionalHelpTopicCommand() bool {
method HasHelpSubCommands (line 1410) | func (c *Command) HasHelpSubCommands() bool {
method HasAvailableSubCommands (line 1424) | func (c *Command) HasAvailableSubCommands() bool {
method HasParent (line 1439) | func (c *Command) HasParent() bool {
method GlobalNormalizationFunc (line 1444) | func (c *Command) GlobalNormalizationFunc() func(f *flag.FlagSet, name...
method Flags (line 1450) | func (c *Command) Flags() *flag.FlagSet {
method LocalNonPersistentFlags (line 1463) | func (c *Command) LocalNonPersistentFlags() *flag.FlagSet {
method LocalFlags (line 1476) | func (c *Command) LocalFlags() *flag.FlagSet {
method InheritedFlags (line 1502) | func (c *Command) InheritedFlags() *flag.FlagSet {
method NonInheritedFlags (line 1527) | func (c *Command) NonInheritedFlags() *flag.FlagSet {
method PersistentFlags (line 1532) | func (c *Command) PersistentFlags() *flag.FlagSet {
method ResetFlags (line 1544) | func (c *Command) ResetFlags() {
method HasFlags (line 1558) | func (c *Command) HasFlags() bool {
method HasPersistentFlags (line 1563) | func (c *Command) HasPersistentFlags() bool {
method HasLocalFlags (line 1568) | func (c *Command) HasLocalFlags() bool {
method HasInheritedFlags (line 1573) | func (c *Command) HasInheritedFlags() bool {
method HasAvailableFlags (line 1579) | func (c *Command) HasAvailableFlags() bool {
method HasAvailablePersistentFlags (line 1584) | func (c *Command) HasAvailablePersistentFlags() bool {
method HasAvailableLocalFlags (line 1590) | func (c *Command) HasAvailableLocalFlags() bool {
method HasAvailableInheritedFlags (line 1596) | func (c *Command) HasAvailableInheritedFlags() bool {
method Flag (line 1601) | func (c *Command) Flag(name string) (flag *flag.Flag) {
method persistentFlag (line 1612) | func (c *Command) persistentFlag(name string) (flag *flag.Flag) {
method ParseFlags (line 1625) | func (c *Command) ParseFlags(args []string) error {
method Parent (line 1649) | func (c *Command) Parent() *Command {
method mergePersistentFlags (line 1655) | func (c *Command) mergePersistentFlags() {
method updateParentsPflags (line 1664) | func (c *Command) updateParentsPflags() {
function hasNoOptDefVal (line 544) | func hasNoOptDefVal(name string, fs *flag.FlagSet) bool {
function shortHasNoOptDefVal (line 552) | func shortHasNoOptDefVal(name string, fs *flag.FlagSet) bool {
function stripFlags (line 564) | func stripFlags(args []string, c *Command) []string {
function argsMinusFirstX (line 604) | func argsMinusFirstX(args []string, x string) []string {
function isFlagArg (line 616) | func isFlagArg(arg string) bool {
type commandSorterByName (line 1127) | type commandSorterByName
method Len (line 1129) | func (c commandSorterByName) Len() int { return len(c) }
method Swap (line 1130) | func (c commandSorterByName) Swap(i, j int) { c[i], c[j] = c[j], ...
method Less (line 1131) | func (c commandSorterByName) Less(i, j int) bool { return c[i].Name() ...
FILE: vendor/github.com/spf13/cobra/command_win.go
function preExecHook (line 16) | func preExecHook(c *Command) {
FILE: vendor/github.com/spf13/cobra/completions.go
constant ShellCompRequestCmd (line 15) | ShellCompRequestCmd = "__complete"
constant ShellCompNoDescRequestCmd (line 18) | ShellCompNoDescRequestCmd = "__completeNoDesc"
type ShellCompDirective (line 29) | type ShellCompDirective
method string (line 123) | func (d ShellCompDirective) string() string {
type flagCompError (line 31) | type flagCompError struct
method Error (line 36) | func (e *flagCompError) Error() string {
constant ShellCompDirectiveError (line 42) | ShellCompDirectiveError ShellCompDirective = 1 << iota
constant ShellCompDirectiveNoSpace (line 46) | ShellCompDirectiveNoSpace
constant ShellCompDirectiveNoFileComp (line 50) | ShellCompDirectiveNoFileComp
constant ShellCompDirectiveFilterFileExt (line 57) | ShellCompDirectiveFilterFileExt
constant ShellCompDirectiveFilterDirs (line 64) | ShellCompDirectiveFilterDirs
constant shellCompDirectiveMaxValue (line 70) | shellCompDirectiveMaxValue
constant ShellCompDirectiveDefault (line 75) | ShellCompDirectiveDefault ShellCompDirective = 0
constant compCmdName (line 80) | compCmdName = "completion"
constant compCmdNoDescFlagName (line 81) | compCmdNoDescFlagName = "no-descriptions"
constant compCmdNoDescFlagDesc (line 82) | compCmdNoDescFlagDesc = "disable completion descriptions"
constant compCmdNoDescFlagDefault (line 83) | compCmdNoDescFlagDefault = false
type CompletionOptions (line 87) | type CompletionOptions struct
function NoFileCompletions (line 102) | func NoFileCompletions(cmd *Command, args []string, toComplete string) (...
method RegisterFlagCompletionFunc (line 107) | func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd...
method initCompleteCmd (line 151) | func (c *Command) initCompleteCmd(args []string) {
method getCompletions (line 217) | func (c *Command) getCompletions(args []string) (*Command, []string, She...
function getFlagNameCompletions (line 449) | func getFlagNameCompletions(flag *pflag.Flag, toComplete string) []string {
function completeRequireFlags (line 482) | func completeRequireFlags(finalCmd *Command, toComplete string) []string {
function checkIfFlagCompletion (line 507) | func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg str...
method initDefaultCompletionCmd (line 598) | func (c *Command) initDefaultCompletionCmd() {
function findFlag (line 751) | func findFlag(cmd *Command, name string) *pflag.Flag {
function CompDebug (line 774) | func CompDebug(msg string, printToStdErr bool) {
function CompDebugln (line 798) | func CompDebugln(msg string, printToStdErr bool) {
function CompError (line 803) | func CompError(msg string) {
function CompErrorln (line 809) | func CompErrorln(msg string) {
FILE: vendor/github.com/spf13/cobra/fish_completions.go
function genFishComp (line 11) | func genFishComp(buf io.StringWriter, name string, includeDesc bool) {
method GenFishCompletion (line 203) | func (c *Command) GenFishCompletion(w io.Writer, includeDesc bool) error {
method GenFishCompletionFile (line 211) | func (c *Command) GenFishCompletionFile(filename string, includeDesc boo...
FILE: vendor/github.com/spf13/cobra/powershell_completions.go
function genPowerShellComp (line 13) | func genPowerShellComp(buf io.StringWriter, name string, includeDesc boo...
method genPowerShellCompletion (line 248) | func (c *Command) genPowerShellCompletion(w io.Writer, includeDesc bool)...
method genPowerShellCompletionFile (line 255) | func (c *Command) genPowerShellCompletionFile(filename string, includeDe...
method GenPowerShellCompletionFile (line 266) | func (c *Command) GenPowerShellCompletionFile(filename string) error {
method GenPowerShellCompletion (line 272) | func (c *Command) GenPowerShellCompletion(w io.Writer) error {
method GenPowerShellCompletionFileWithDesc (line 277) | func (c *Command) GenPowerShellCompletionFileWithDesc(filename string) e...
method GenPowerShellCompletionWithDesc (line 283) | func (c *Command) GenPowerShellCompletionWithDesc(w io.Writer) error {
FILE: vendor/github.com/spf13/cobra/shell_completions.go
method MarkFlagRequired (line 10) | func (c *Command) MarkFlagRequired(name string) error {
method MarkPersistentFlagRequired (line 17) | func (c *Command) MarkPersistentFlagRequired(name string) error {
function MarkFlagRequired (line 24) | func MarkFlagRequired(flags *pflag.FlagSet, name string) error {
method MarkFlagFilename (line 30) | func (c *Command) MarkFlagFilename(name string, extensions ...string) er...
method MarkFlagCustom (line 40) | func (c *Command) MarkFlagCustom(name string, f string) error {
method MarkPersistentFlagFilename (line 47) | func (c *Command) MarkPersistentFlagFilename(name string, extensions ......
function MarkFlagFilename (line 53) | func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...s...
function MarkFlagCustom (line 63) | func MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error {
method MarkFlagDirname (line 69) | func (c *Command) MarkFlagDirname(name string) error {
method MarkPersistentFlagDirname (line 76) | func (c *Command) MarkPersistentFlagDirname(name string) error {
function MarkFlagDirname (line 82) | func MarkFlagDirname(flags *pflag.FlagSet, name string) error {
FILE: vendor/github.com/spf13/cobra/zsh_completions.go
method GenZshCompletionFile (line 11) | func (c *Command) GenZshCompletionFile(filename string) error {
method GenZshCompletion (line 17) | func (c *Command) GenZshCompletion(w io.Writer) error {
method GenZshCompletionFileNoDesc (line 22) | func (c *Command) GenZshCompletionFileNoDesc(filename string) error {
method GenZshCompletionNoDesc (line 28) | func (c *Command) GenZshCompletionNoDesc(w io.Writer) error {
method MarkZshCompPositionalArgumentFile (line 41) | func (c *Command) MarkZshCompPositionalArgumentFile(argPosition int, pat...
method MarkZshCompPositionalArgumentWords (line 52) | func (c *Command) MarkZshCompPositionalArgumentWords(argPosition int, wo...
method genZshCompletionFile (line 56) | func (c *Command) genZshCompletionFile(filename string, includeDesc bool...
method genZshCompletion (line 66) | func (c *Command) genZshCompletion(w io.Writer, includeDesc bool) error {
function genZshComp (line 73) | func genZshComp(buf io.StringWriter, name string, includeDesc bool) {
FILE: vendor/github.com/spf13/pflag/bool.go
type boolFlag (line 7) | type boolFlag interface
type boolValue (line 13) | type boolValue
method Set (line 20) | func (b *boolValue) Set(s string) error {
method Type (line 26) | func (b *boolValue) Type() string {
method String (line 30) | func (b *boolValue) String() string { return strconv.FormatBool(bool(*...
method IsBoolFlag (line 32) | func (b *boolValue) IsBoolFlag() bool { return true }
function newBoolValue (line 15) | func newBoolValue(val bool, p *bool) *boolValue {
function boolConv (line 34) | func boolConv(sval string) (interface{}, error) {
method GetBool (line 39) | func (f *FlagSet) GetBool(name string) (bool, error) {
method BoolVar (line 49) | func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {
method BoolVarP (line 54) | func (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, ...
function BoolVar (line 61) | func BoolVar(p *bool, name string, value bool, usage string) {
function BoolVarP (line 66) | func BoolVarP(p *bool, name, shorthand string, value bool, usage string) {
method Bool (line 73) | func (f *FlagSet) Bool(name string, value bool, usage string) *bool {
method BoolP (line 78) | func (f *FlagSet) BoolP(name, shorthand string, value bool, usage string...
function Bool (line 86) | func Bool(name string, value bool, usage string) *bool {
function BoolP (line 91) | func BoolP(name, shorthand string, value bool, usage string) *bool {
FILE: vendor/github.com/spf13/pflag/bool_slice.go
type boolSliceValue (line 10) | type boolSliceValue struct
method Set (line 24) | func (s *boolSliceValue) Set(val string) error {
method Type (line 57) | func (s *boolSliceValue) Type() string {
method String (line 62) | func (s *boolSliceValue) String() string {
method fromString (line 74) | func (s *boolSliceValue) fromString(val string) (bool, error) {
method toString (line 78) | func (s *boolSliceValue) toString(val bool) string {
method Append (line 82) | func (s *boolSliceValue) Append(val string) error {
method Replace (line 91) | func (s *boolSliceValue) Replace(val []string) error {
method GetSlice (line 104) | func (s *boolSliceValue) GetSlice() []string {
function newBoolSliceValue (line 15) | func newBoolSliceValue(val []bool, p *[]bool) *boolSliceValue {
function boolSliceConv (line 112) | func boolSliceConv(val string) (interface{}, error) {
method GetBoolSlice (line 131) | func (f *FlagSet) GetBoolSlice(name string) ([]bool, error) {
method BoolSliceVar (line 141) | func (f *FlagSet) BoolSliceVar(p *[]bool, name string, value []bool, usa...
method BoolSliceVarP (line 146) | func (f *FlagSet) BoolSliceVarP(p *[]bool, name, shorthand string, value...
function BoolSliceVar (line 152) | func BoolSliceVar(p *[]bool, name string, value []bool, usage string) {
function BoolSliceVarP (line 157) | func BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usag...
method BoolSlice (line 163) | func (f *FlagSet) BoolSlice(name string, value []bool, usage string) *[]...
method BoolSliceP (line 170) | func (f *FlagSet) BoolSliceP(name, shorthand string, value []bool, usage...
function BoolSlice (line 178) | func BoolSlice(name string, value []bool, usage string) *[]bool {
function BoolSliceP (line 183) | func BoolSliceP(name, shorthand string, value []bool, usage string) *[]b...
FILE: vendor/github.com/spf13/pflag/bytes.go
type bytesHexValue (line 11) | type bytesHexValue
method String (line 14) | func (bytesHex bytesHexValue) String() string {
method Set (line 19) | func (bytesHex *bytesHexValue) Set(value string) error {
method Type (line 32) | func (*bytesHexValue) Type() string {
function newBytesHexValue (line 36) | func newBytesHexValue(val []byte, p *[]byte) *bytesHexValue {
function bytesHexConv (line 41) | func bytesHexConv(sval string) (interface{}, error) {
method GetBytesHex (line 53) | func (f *FlagSet) GetBytesHex(name string) ([]byte, error) {
method BytesHexVar (line 65) | func (f *FlagSet) BytesHexVar(p *[]byte, name string, value []byte, usag...
method BytesHexVarP (line 70) | func (f *FlagSet) BytesHexVarP(p *[]byte, name, shorthand string, value ...
function BytesHexVar (line 76) | func BytesHexVar(p *[]byte, name string, value []byte, usage string) {
function BytesHexVarP (line 81) | func BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage...
method BytesHex (line 87) | func (f *FlagSet) BytesHex(name string, value []byte, usage string) *[]b...
method BytesHexP (line 94) | func (f *FlagSet) BytesHexP(name, shorthand string, value []byte, usage ...
function BytesHex (line 102) | func BytesHex(name string, value []byte, usage string) *[]byte {
function BytesHexP (line 107) | func BytesHexP(name, shorthand string, value []byte, usage string) *[]by...
type bytesBase64Value (line 112) | type bytesBase64Value
method String (line 115) | func (bytesBase64 bytesBase64Value) String() string {
method Set (line 120) | func (bytesBase64 *bytesBase64Value) Set(value string) error {
method Type (line 133) | func (*bytesBase64Value) Type() string {
function newBytesBase64Value (line 137) | func newBytesBase64Value(val []byte, p *[]byte) *bytesBase64Value {
function bytesBase64ValueConv (line 142) | func bytesBase64ValueConv(sval string) (interface{}, error) {
method GetBytesBase64 (line 153) | func (f *FlagSet) GetBytesBase64(name string) ([]byte, error) {
method BytesBase64Var (line 165) | func (f *FlagSet) BytesBase64Var(p *[]byte, name string, value []byte, u...
method BytesBase64VarP (line 170) | func (f *FlagSet) BytesBase64VarP(p *[]byte, name, shorthand string, val...
function BytesBase64Var (line 176) | func BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
function BytesBase64VarP (line 181) | func BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, us...
method BytesBase64 (line 187) | func (f *FlagSet) BytesBase64(name string, value []byte, usage string) *...
method BytesBase64P (line 194) | func (f *FlagSet) BytesBase64P(name, shorthand string, value []byte, usa...
function BytesBase64 (line 202) | func BytesBase64(name string, value []byte, usage string) *[]byte {
function BytesBase64P (line 207) | func BytesBase64P(name, shorthand string, value []byte, usage string) *[...
FILE: vendor/github.com/spf13/pflag/count.go
type countValue (line 6) | type countValue
method Set (line 13) | func (i *countValue) Set(s string) error {
method Type (line 24) | func (i *countValue) Type() string {
method String (line 28) | func (i *countValue) String() string { return strconv.Itoa(int(*i)) }
function newCountValue (line 8) | func newCountValue(val int, p *int) *countValue {
function countConv (line 30) | func countConv(sval string) (interface{}, error) {
method GetCount (line 39) | func (f *FlagSet) GetCount(name string) (int, error) {
method CountVar (line 50) | func (f *FlagSet) CountVar(p *int, name string, usage string) {
method CountVarP (line 55) | func (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {
function CountVar (line 61) | func CountVar(p *int, name string, usage string) {
function CountVarP (line 66) | func CountVarP(p *int, name, shorthand string, usage string) {
method Count (line 73) | func (f *FlagSet) Count(name string, usage string) *int {
method CountP (line 80) | func (f *FlagSet) CountP(name, shorthand string, usage string) *int {
function Count (line 89) | func Count(name string, usage string) *int {
function CountP (line 94) | func CountP(name, shorthand string, usage string) *int {
FILE: vendor/github.com/spf13/pflag/duration.go
type durationValue (line 8) | type durationValue
method Set (line 15) | func (d *durationValue) Set(s string) error {
method Type (line 21) | func (d *durationValue) Type() string {
method String (line 25) | func (d *durationValue) String() string { return (*time.Duration)(d).S...
function newDurationValue (line 10) | func newDurationValue(val time.Duration, p *time.Duration) *durationValue {
function durationConv (line 27) | func durationConv(sval string) (interface{}, error) {
method GetDuration (line 32) | func (f *FlagSet) GetDuration(name string) (time.Duration, error) {
method DurationVar (line 42) | func (f *FlagSet) DurationVar(p *time.Duration, name string, value time....
method DurationVarP (line 47) | func (f *FlagSet) DurationVarP(p *time.Duration, name, shorthand string,...
function DurationVar (line 53) | func DurationVar(p *time.Duration, name string, value time.Duration, usa...
function DurationVarP (line 58) | func DurationVarP(p *time.Duration, name, shorthand string, value time.D...
method Duration (line 64) | func (f *FlagSet) Duration(name string, value time.Duration, usage strin...
method DurationP (line 71) | func (f *FlagSet) DurationP(name, shorthand string, value time.Duration,...
function Duration (line 79) | func Duration(name string, value time.Duration, usage string) *time.Dura...
function DurationP (line 84) | func DurationP(name, shorthand string, value time.Duration, usage string...
FILE: vendor/github.com/spf13/pflag/duration_slice.go
type durationSliceValue (line 10) | type durationSliceValue struct
method Set (line 22) | func (s *durationSliceValue) Set(val string) error {
method Type (line 42) | func (s *durationSliceValue) Type() string {
method String (line 46) | func (s *durationSliceValue) String() string {
method fromString (line 54) | func (s *durationSliceValue) fromString(val string) (time.Duration, er...
method toString (line 58) | func (s *durationSliceValue) toString(val time.Duration) string {
method Append (line 62) | func (s *durationSliceValue) Append(val string) error {
method Replace (line 71) | func (s *durationSliceValue) Replace(val []string) error {
method GetSlice (line 84) | func (s *durationSliceValue) GetSlice() []string {
function newDurationSliceValue (line 15) | func newDurationSliceValue(val []time.Duration, p *[]time.Duration) *dur...
function durationSliceConv (line 92) | func durationSliceConv(val string) (interface{}, error) {
method GetDurationSlice (line 112) | func (f *FlagSet) GetDurationSlice(name string) ([]time.Duration, error) {
method DurationSliceVar (line 122) | func (f *FlagSet) DurationSliceVar(p *[]time.Duration, name string, valu...
method DurationSliceVarP (line 127) | func (f *FlagSet) DurationSliceVarP(p *[]time.Duration, name, shorthand ...
function DurationSliceVar (line 133) | func DurationSliceVar(p *[]time.Duration, name string, value []time.Dura...
function DurationSliceVarP (line 138) | func DurationSliceVarP(p *[]time.Duration, name, shorthand string, value...
method DurationSlice (line 144) | func (f *FlagSet) DurationSlice(name string, value []time.Duration, usag...
method DurationSliceP (line 151) | func (f *FlagSet) DurationSliceP(name, shorthand string, value []time.Du...
function DurationSlice (line 159) | func DurationSlice(name string, value []time.Duration, usage string) *[]...
function DurationSliceP (line 164) | func DurationSliceP(name, shorthand string, value []time.Duration, usage...
FILE: vendor/github.com/spf13/pflag/flag.go
type ErrorHandling (line 116) | type ErrorHandling
constant ContinueOnError (line 120) | ContinueOnError ErrorHandling = iota
constant ExitOnError (line 122) | ExitOnError
constant PanicOnError (line 124) | PanicOnError
type ParseErrorsWhitelist (line 128) | type ParseErrorsWhitelist struct
type NormalizedName (line 135) | type NormalizedName
type FlagSet (line 138) | type FlagSet struct
method SetNormalizeFunc (line 226) | func (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) Nor...
method GetNormalizeFunc (line 246) | func (f *FlagSet) GetNormalizeFunc() func(f *FlagSet, name string) Nor...
method normalizeFlagName (line 253) | func (f *FlagSet) normalizeFlagName(name string) NormalizedName {
method out (line 258) | func (f *FlagSet) out() io.Writer {
method SetOutput (line 267) | func (f *FlagSet) SetOutput(output io.Writer) {
method VisitAll (line 274) | func (f *FlagSet) VisitAll(fn func(*Flag)) {
method HasFlags (line 295) | func (f *FlagSet) HasFlags() bool {
method HasAvailableFlags (line 301) | func (f *FlagSet) HasAvailableFlags() bool {
method Visit (line 320) | func (f *FlagSet) Visit(fn func(*Flag)) {
method Lookup (line 348) | func (f *FlagSet) Lookup(name string) *Flag {
method ShorthandLookup (line 355) | func (f *FlagSet) ShorthandLookup(name string) *Flag {
method lookup (line 369) | func (f *FlagSet) lookup(name NormalizedName) *Flag {
method getFlagType (line 374) | func (f *FlagSet) getFlagType(name string, ftype string, convFunc func...
method ArgsLenAtDash (line 397) | func (f *FlagSet) ArgsLenAtDash() int {
method MarkDeprecated (line 404) | func (f *FlagSet) MarkDeprecated(name string, usageMessage string) err...
method MarkShorthandDeprecated (line 420) | func (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage st...
method MarkHidden (line 434) | func (f *FlagSet) MarkHidden(name string) error {
method Set (line 456) | func (f *FlagSet) Set(name, value string) error {
method SetAnnotation (line 493) | func (f *FlagSet) SetAnnotation(name, key string, values []string) err...
method Changed (line 508) | func (f *FlagSet) Changed(name string) bool {
method PrintDefaults (line 524) | func (f *FlagSet) PrintDefaults() {
method FlagUsagesWrapped (line 677) | func (f *FlagSet) FlagUsagesWrapped(cols int) string {
method FlagUsages (line 750) | func (f *FlagSet) FlagUsages() string {
method NFlag (line 779) | func (f *FlagSet) NFlag() int { return len(f.actual) }
method Arg (line 786) | func (f *FlagSet) Arg(i int) string {
method NArg (line 800) | func (f *FlagSet) NArg() int { return len(f.args) }
method Args (line 806) | func (f *FlagSet) Args() []string { return f.args }
method Var (line 817) | func (f *FlagSet) Var(value Value, name string, usage string) {
method VarPF (line 822) | func (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *F...
method VarP (line 836) | func (f *FlagSet) VarP(value Value, name, shorthand, usage string) {
method AddFlag (line 841) | func (f *FlagSet) AddFlag(flag *Flag) {
method AddFlagSet (line 881) | func (f *FlagSet) AddFlagSet(newSet *FlagSet) {
method failf (line 909) | func (f *FlagSet) failf(format string, a ...interface{}) error {
method usage (line 920) | func (f *FlagSet) usage() {
method parseLongArg (line 952) | func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) ...
method parseSingleShortArg (line 1007) | func (f *FlagSet) parseSingleShortArg(shorthands string, args []string...
method parseShortArg (line 1073) | func (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc)...
method parseArgs (line 1088) | func (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) {
method Parse (line 1123) | func (f *FlagSet) Parse(arguments []string) error {
method ParseAll (line 1163) | func (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, val...
method Parsed (line 1182) | func (f *FlagSet) Parsed() bool {
method SetInterspersed (line 1228) | func (f *FlagSet) SetInterspersed(interspersed bool) {
method Init (line 1235) | func (f *FlagSet) Init(name string, errorHandling ErrorHandling) {
type Flag (line 171) | type Flag struct
method defaultIsZeroValue (line 531) | func (f *Flag) defaultIsZeroValue() bool {
type Value (line 187) | type Value interface
type SliceValue (line 196) | type SliceValue interface
function sortFlags (line 206) | func sortFlags(flags map[NormalizedName]*Flag) []*Flag {
function VisitAll (line 313) | func VisitAll(fn func(*Flag)) {
function Visit (line 343) | func Visit(fn func(*Flag)) {
function Lookup (line 445) | func Lookup(name string) *Flag {
function ShorthandLookup (line 451) | func ShorthandLookup(name string) *Flag {
function Set (line 518) | func Set(name, value string) error {
function UnquoteUsage (line 566) | func UnquoteUsage(flag *Flag) (name string, usage string) {
function wrapN (line 609) | func wrapN(i, slop int, s string) (string, string) {
function wrap (line 628) | func wrap(i, w int, s string) string {
function PrintDefaults (line 755) | func PrintDefaults() {
function defaultUsage (line 760) | func defaultUsage(f *FlagSet) {
function NFlag (line 782) | func NFlag() int { return len(CommandLine.actual) }
function Arg (line 795) | func Arg(i int) string {
function NArg (line 803) | func NArg() int { return len(CommandLine.args) }
function Args (line 809) | func Args() []string { return CommandLine.args }
function Var (line 898) | func Var(value Value, name string, usage string) {
function VarP (line 903) | func VarP(value Value, name, shorthand, usage string) {
function stripUnknownFlagValue (line 933) | func stripUnknownFlagValue(args []string) []string {
type parseFunc (line 1156) | type parseFunc
function Parse (line 1188) | func Parse() {
function ParseAll (line 1196) | func ParseAll(fn func(flag *Flag, value string) error) {
function SetInterspersed (line 1202) | func SetInterspersed(interspersed bool) {
function Parsed (line 1207) | func Parsed() bool {
function NewFlagSet (line 1216) | func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {
FILE: vendor/github.com/spf13/pflag/float32.go
type float32Value (line 6) | type float32Value
method Set (line 13) | func (f *float32Value) Set(s string) error {
method Type (line 19) | func (f *float32Value) Type() string {
method String (line 23) | func (f *float32Value) String() string { return strconv.FormatFloat(fl...
function newFloat32Value (line 8) | func newFloat32Value(val float32, p *float32) *float32Value {
function float32Conv (line 25) | func float32Conv(sval string) (interface{}, error) {
method GetFloat32 (line 34) | func (f *FlagSet) GetFloat32(name string) (float32, error) {
method Float32Var (line 44) | func (f *FlagSet) Float32Var(p *float32, name string, value float32, usa...
method Float32VarP (line 49) | func (f *FlagSet) Float32VarP(p *float32, name, shorthand string, value ...
function Float32Var (line 55) | func Float32Var(p *float32, name string, value float32, usage string) {
function Float32VarP (line 60) | func Float32VarP(p *float32, name, shorthand string, value float32, usag...
method Float32 (line 66) | func (f *FlagSet) Float32(name string, value float32, usage string) *flo...
method Float32P (line 73) | func (f *FlagSet) Float32P(name, shorthand string, value float32, usage ...
function Float32 (line 81) | func Float32(name string, value float32, usage string) *float32 {
function Float32P (line 86) | func Float32P(name, shorthand string, value float32, usage string) *floa...
FILE: vendor/github.com/spf13/pflag/float32_slice.go
type float32SliceValue (line 10) | type float32SliceValue struct
method Set (line 22) | func (s *float32SliceValue) Set(val string) error {
method Type (line 44) | func (s *float32SliceValue) Type() string {
method String (line 48) | func (s *float32SliceValue) String() string {
method fromString (line 56) | func (s *float32SliceValue) fromString(val string) (float32, error) {
method toString (line 64) | func (s *float32SliceValue) toString(val float32) string {
method Append (line 68) | func (s *float32SliceValue) Append(val string) error {
method Replace (line 77) | func (s *float32SliceValue) Replace(val []string) error {
method GetSlice (line 90) | func (s *float32SliceValue) GetSlice() []string {
function newFloat32SliceValue (line 15) | func newFloat32SliceValue(val []float32, p *[]float32) *float32SliceValue {
function float32SliceConv (line 98) | func float32SliceConv(val string) (interface{}, error) {
method GetFloat32Slice (line 120) | func (f *FlagSet) GetFloat32Slice(name string) ([]float32, error) {
method Float32SliceVar (line 130) | func (f *FlagSet) Float32SliceVar(p *[]float32, name string, value []flo...
method Float32SliceVarP (line 135) | func (f *FlagSet) Float32SliceVarP(p *[]float32, name, shorthand string,...
function Float32SliceVar (line 141) | func Float32SliceVar(p *[]float32, name string, value []float32, usage s...
function Float32SliceVarP (line 146) | func Float32SliceVarP(p *[]float32, name, shorthand string, value []floa...
method Float32Slice (line 152) | func (f *FlagSet) Float32Slice(name string, value []float32, usage strin...
method Float32SliceP (line 159) | func (f *FlagSet) Float32SliceP(name, shorthand string, value []float32,...
function Float32Slice (line 167) | func Float32Slice(name string, value []float32, usage string) *[]float32 {
function Float32SliceP (line 172) | func Float32SliceP(name, shorthand string, value []float32, usage string...
FILE: vendor/github.com/spf13/pflag/float64.go
type float64Value (line 6) | type float64Value
method Set (line 13) | func (f *float64Value) Set(s string) error {
method Type (line 19) | func (f *float64Value) Type() string {
method String (line 23) | func (f *float64Value) String() string { return strconv.FormatFloat(fl...
function newFloat64Value (line 8) | func newFloat64Value(val float64, p *float64) *float64Value {
function float64Conv (line 25) | func float64Conv(sval string) (interface{}, error) {
method GetFloat64 (line 30) | func (f *FlagSet) GetFloat64(name string) (float64, error) {
method Float64Var (line 40) | func (f *FlagSet) Float64Var(p *float64, name string, value float64, usa...
method Float64VarP (line 45) | func (f *FlagSet) Float64VarP(p *float64, name, shorthand string, value ...
function Float64Var (line 51) | func Float64Var(p *float64, name string, value float64, usage string) {
function Float64VarP (line 56) | func Float64VarP(p *float64, name, shorthand string, value float64, usag...
method Float64 (line 62) | func (f *FlagSet) Float64(name string, value float64, usage string) *flo...
method Float64P (line 69) | func (f *FlagSet) Float64P(name, shorthand string, value float64, usage ...
function Float64 (line 77) | func Float64(name string, value float64, usage string) *float64 {
function Float64P (line 82) | func Float64P(name, shorthand string, value float64, usage string) *floa...
FILE: vendor/github.com/spf13/pflag/float64_slice.go
type float64SliceValue (line 10) | type float64SliceValue struct
method Set (line 22) | func (s *float64SliceValue) Set(val string) error {
method Type (line 42) | func (s *float64SliceValue) Type() string {
method String (line 46) | func (s *float64SliceValue) String() string {
method fromString (line 54) | func (s *float64SliceValue) fromString(val string) (float64, error) {
method toString (line 58) | func (s *float64SliceValue) toString(val float64) string {
method Append (line 62) | func (s *float64SliceValue) Append(val string) error {
method Replace (line 71) | func (s *float64SliceValue) Replace(val []string) error {
method GetSlice (line 84) | func (s *float64SliceValue) GetSlice() []string {
function newFloat64SliceValue (line 15) | func newFloat64SliceValue(val []float64, p *[]float64) *float64SliceValue {
function float64SliceConv (line 92) | func float64SliceConv(val string) (interface{}, error) {
method GetFloat64Slice (line 112) | func (f *FlagSet) GetFloat64Slice(name string) ([]float64, error) {
method Float64SliceVar (line 122) | func (f *FlagSet) Float64SliceVar(p *[]float64, name string, value []flo...
method Float64SliceVarP (line 127) | func (f *FlagSet) Float64SliceVarP(p *[]float64, name, shorthand string,...
function Float64SliceVar (line 133) | func Float64SliceVar(p *[]float64, name string, value []float64, usage s...
function Float64SliceVarP (line 138) | func Float64SliceVarP(p *[]float64, name, shorthand string, value []floa...
method Float64Slice (line 144) | func (f *FlagSet) Float64Slice(name string, value []float64, usage strin...
method Float64SliceP (line 151) | func (f *FlagSet) Float64SliceP(name, shorthand string, value []float64,...
function Float64Slice (line 159) | func Float64Slice(name string, value []float64, usage string) *[]float64 {
function Float64SliceP (line 164) | func Float64SliceP(name, shorthand string, value []float64, usage string...
FILE: vendor/github.com/spf13/pflag/golangflag.go
type flagValueWrapper (line 17) | type flagValueWrapper struct
method String (line 48) | func (v *flagValueWrapper) String() string {
method Set (line 52) | func (v *flagValueWrapper) Set(s string) error {
method Type (line 56) | func (v *flagValueWrapper) Type() string {
type goBoolFlag (line 24) | type goBoolFlag interface
function wrapFlagValue (line 29) | func wrapFlagValue(v goflag.Value) Value {
function PFlagFromGoFlag (line 64) | func PFlagFromGoFlag(goflag *goflag.Flag) *Flag {
method AddGoFlag (line 85) | func (f *FlagSet) AddGoFlag(goflag *goflag.Flag) {
method AddGoFlagSet (line 94) | func (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) {
FILE: vendor/github.com/spf13/pflag/int.go
type intValue (line 6) | type intValue
method Set (line 13) | func (i *intValue) Set(s string) error {
method Type (line 19) | func (i *intValue) Type() string {
method String (line 23) | func (i *intValue) String() string { return strconv.Itoa(int(*i)) }
function newIntValue (line 8) | func newIntValue(val int, p *int) *intValue {
function intConv (line 25) | func intConv(sval string) (interface{}, error) {
method GetInt (line 30) | func (f *FlagSet) GetInt(name string) (int, error) {
method IntVar (line 40) | func (f *FlagSet) IntVar(p *int, name string, value int, usage string) {
method IntVarP (line 45) | func (f *FlagSet) IntVarP(p *int, name, shorthand string, value int, usa...
function IntVar (line 51) | func IntVar(p *int, name string, value int, usage string) {
function IntVarP (line 56) | func IntVarP(p *int, name, shorthand string, value int, usage string) {
method Int (line 62) | func (f *FlagSet) Int(name string, value int, usage string) *int {
method IntP (line 69) | func (f *FlagSet) IntP(name, shorthand string, value int, usage string) ...
function Int (line 77) | func Int(name string, value int, usage string) *int {
function IntP (line 82) | func IntP(name, shorthand string, value int, usage string) *int {
FILE: vendor/github.com/spf13/pflag/int16.go
type int16Value (line 6) | type int16Value
method Set (line 13) | func (i *int16Value) Set(s string) error {
method Type (line 19) | func (i *int16Value) Type() string {
method String (line 23) | func (i *int16Value) String() string { return strconv.FormatInt(int64(...
function newInt16Value (line 8) | func newInt16Value(val int16, p *int16) *int16Value {
function int16Conv (line 25) | func int16Conv(sval string) (interface{}, error) {
method GetInt16 (line 34) | func (f *FlagSet) GetInt16(name string) (int16, error) {
method Int16Var (line 44) | func (f *FlagSet) Int16Var(p *int16, name string, value int16, usage str...
method Int16VarP (line 49) | func (f *FlagSet) Int16VarP(p *int16, name, shorthand string, value int1...
function Int16Var (line 55) | func Int16Var(p *int16, name string, value int16, usage string) {
function Int16VarP (line 60) | func Int16VarP(p *int16, name, shorthand string, value int16, usage stri...
method Int16 (line 66) | func (f *FlagSet) Int16(name string, value int16, usage string) *int16 {
method Int16P (line 73) | func (f *FlagSet) Int16P(name, shorthand string, value int16, usage stri...
function Int16 (line 81) | func Int16(name string, value int16, usage string) *int16 {
function Int16P (line 86) | func Int16P(name, shorthand string, value int16, usage string) *int16 {
FILE: vendor/github.com/spf13/pflag/int32.go
type int32Value (line 6) | type int32Value
method Set (line 13) | func (i *int32Value) Set(s string) error {
method Type (line 19) | func (i *int32Value) Type() string {
method String (line 23) | func (i *int32Value) String() string { return strconv.FormatInt(int64(...
function newInt32Value (line 8) | func newInt32Value(val int32, p *int32) *int32Value {
function int32Conv (line 25) | func int32Conv(sval string) (interface{}, error) {
method GetInt32 (line 34) | func (f *FlagSet) GetInt32(name string) (int32, error) {
method Int32Var (line 44) | func (f *FlagSet) Int32Var(p *int32, name string, value int32, usage str...
method Int32VarP (line 49) | func (f *FlagSet) Int32VarP(p *int32, name, shorthand string, value int3...
function Int32Var (line 55) | func Int32Var(p *int32, name string, value int32, usage string) {
function Int32VarP (line 60) | func Int32VarP(p *int32, name, shorthand string, value int32, usage stri...
method Int32 (line 66) | func (f *FlagSet) Int32(name string, value int32, usage string) *int32 {
method Int32P (line 73) | func (f *FlagSet) Int32P(name, shorthand string, value int32, usage stri...
function Int32 (line 81) | func Int32(name string, value int32, usage string) *int32 {
function Int32P (line 86) | func Int32P(name, shorthand string, value int32, usage string) *int32 {
FILE: vendor/github.com/spf13/pflag/int32_slice.go
type int32SliceValue (line 10) | type int32SliceValue struct
method Set (line 22) | func (s *int32SliceValue) Set(val string) error {
method Type (line 44) | func (s *int32SliceValue) Type() string {
method String (line 48) | func (s *int32SliceValue) String() string {
method fromString (line 56) | func (s *int32SliceValue) fromString(val string) (int32, error) {
method toString (line 64) | func (s *int32SliceValue) toString(val int32) string {
method Append (line 68) | func (s *int32SliceValue) Append(val string) error {
method Replace (line 77) | func (s *int32SliceValue) Replace(val []string) error {
method GetSlice (line 90) | func (s *int32SliceValue) GetSlice() []string {
function newInt32SliceValue (line 15) | func newInt32SliceValue(val []int32, p *[]int32) *int32SliceValue {
function int32SliceConv (line 98) | func int32SliceConv(val string) (interface{}, error) {
method GetInt32Slice (line 120) | func (f *FlagSet) GetInt32Slice(name string) ([]int32, error) {
method Int32SliceVar (line 130) | func (f *FlagSet) Int32SliceVar(p *[]int32, name string, value []int32, ...
method Int32SliceVarP (line 135) | func (f *FlagSet) Int32SliceVarP(p *[]int32, name, shorthand string, val...
function Int32SliceVar (line 141) | func Int32SliceVar(p *[]int32, name string, value []int32, usage string) {
function Int32SliceVarP (line 146) | func Int32SliceVarP(p *[]int32, name, shorthand string, value []int32, u...
method Int32Slice (line 152) | func (f *FlagSet) Int32Slice(name string, value []int32, usage string) *...
method Int32SliceP (line 159) | func (f *FlagSet) Int32SliceP(name, shorthand string, value []int32, usa...
function Int32Slice (line 167) | func Int32Slice(name string, value []int32, usage string) *[]int32 {
function Int32SliceP (line 172) | func Int32SliceP(name, shorthand string, value []int32, usage string) *[...
FILE: vendor/github.com/spf13/pflag/int64.go
type int64Value (line 6) | type int64Value
method Set (line 13) | func (i *int64Value) Set(s string) error {
method Type (line 19) | func (i *int64Value) Type() string {
method String (line 23) | func (i *int64Value) String() string { return strconv.FormatInt(int64(...
function newInt64Value (line 8) | func newInt64Value(val int64, p *int64) *int64Value {
function int64Conv (line 25) | func int64Conv(sval string) (interface{}, error) {
method GetInt64 (line 30) | func (f *FlagSet) GetInt64(name string) (int64, error) {
method Int64Var (line 40) | func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage str...
method Int64VarP (line 45) | func (f *FlagSet) Int64VarP(p *int64, name, shorthand string, value int6...
function Int64Var (line 51) | func Int64Var(p *int64, name string, value int64, usage string) {
function Int64VarP (line 56) | func Int64VarP(p *int64, name, shorthand string, value int64, usage stri...
method Int64 (line 62) | func (f *FlagSet) Int64(name string, value int64, usage string) *int64 {
method Int64P (line 69) | func (f *FlagSet) Int64P(name, shorthand string, value int64, usage stri...
function Int64 (line 77) | func Int64(name string, value int64, usage string) *int64 {
function Int64P (line 82) | func Int64P(name, shorthand string, value int64, usage string) *int64 {
FILE: vendor/github.com/spf13/pflag/int64_slice.go
type int64SliceValue (line 10) | type int64SliceValue struct
method Set (line 22) | func (s *int64SliceValue) Set(val string) error {
method Type (line 42) | func (s *int64SliceValue) Type() string {
method String (line 46) | func (s *int64SliceValue) String() string {
method fromString (line 54) | func (s *int64SliceValue) fromString(val string) (int64, error) {
method toString (line 58) | func (s *int64SliceValue) toString(val int64) string {
method Append (line 62) | func (s *int64SliceValue) Append(val string) error {
method Replace (line 71) | func (s *int64SliceValue) Replace(val []string) error {
method GetSlice (line 84) | func (s *int64SliceValue) GetSlice() []string {
function newInt64SliceValue (line 15) | func newInt64SliceValue(val []int64, p *[]int64) *int64SliceValue {
function int64SliceConv (line 92) | func int64SliceConv(val string) (interface{}, error) {
method GetInt64Slice (line 112) | func (f *FlagSet) GetInt64Slice(name string) ([]int64, error) {
method Int64SliceVar (line 122) | func (f *FlagSet) Int64SliceVar(p *[]int64, name string, value []int64, ...
method Int64SliceVarP (line 127) | func (f *FlagSet) Int64SliceVarP(p *[]int64, name, shorthand string, val...
function Int64SliceVar (line 133) | func Int64SliceVar(p *[]int64, name string, value []int64, usage string) {
function Int64SliceVarP (line 138) | func Int64SliceVarP(p *[]int64, name, shorthand string, value []int64, u...
method Int64Slice (line 144) | func (f *FlagSet) Int64Slice(name string, value []int64, usage string) *...
method Int64SliceP (line 151) | func (f *FlagSet) Int64SliceP(name, shorthand string, value []int64, usa...
function Int64Slice (line 159) | func Int64Slice(name string, value []int64, usage string) *[]int64 {
function Int64SliceP (line 164) | func Int64SliceP(name, shorthand string, value []int64, usage string) *[...
FILE: vendor/github.com/spf13/pflag/int8.go
type int8Value (line 6) | type int8Value
method Set (line 13) | func (i *int8Value) Set(s string) error {
method Type (line 19) | func (i *int8Value) Type() string {
method String (line 23) | func (i *int8Value) String() string { return strconv.FormatInt(int64(*...
function newInt8Value (line 8) | func newInt8Value(val int8, p *int8) *int8Value {
function int8Conv (line 25) | func int8Conv(sval string) (interface{}, error) {
method GetInt8 (line 34) | func (f *FlagSet) GetInt8(name string) (int8, error) {
method Int8Var (line 44) | func (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) {
method Int8VarP (line 49) | func (f *FlagSet) Int8VarP(p *int8, name, shorthand string, value int8, ...
function Int8Var (line 55) | func Int8Var(p *int8, name string, value int8, usage string) {
function Int8VarP (line 60) | func Int8VarP(p *int8, name, shorthand string, value int8, usage string) {
method Int8 (line 66) | func (f *FlagSet) Int8(name string, value int8, usage string) *int8 {
method Int8P (line 73) | func (f *FlagSet) Int8P(name, shorthand string, value int8, usage string...
function Int8 (line 81) | func Int8(name string, value int8, usage string) *int8 {
function Int8P (line 86) | func Int8P(name, shorthand string, value int8, usage string) *int8 {
FILE: vendor/github.com/spf13/pflag/int_slice.go
type intSliceValue (line 10) | type intSliceValue struct
method Set (line 22) | func (s *intSliceValue) Set(val string) error {
method Type (line 42) | func (s *intSliceValue) Type() string {
method String (line 46) | func (s *intSliceValue) String() string {
method Append (line 54) | func (s *intSliceValue) Append(val string) error {
method Replace (line 63) | func (s *intSliceValue) Replace(val []string) error {
method GetSlice (line 76) | func (s *intSliceValue) GetSlice() []string {
function newIntSliceValue (line 15) | func newIntSliceValue(val []int, p *[]int) *intSliceValue {
function intSliceConv (line 84) | func intSliceConv(val string) (interface{}, error) {
method GetIntSlice (line 104) | func (f *FlagSet) GetIntSlice(name string) ([]int, error) {
method IntSliceVar (line 114) | func (f *FlagSet) IntSliceVar(p *[]int, name string, value []int, usage ...
method IntSliceVarP (line 119) | func (f *FlagSet) IntSliceVarP(p *[]int, name, shorthand string, value [...
function IntSliceVar (line 125) | func IntSliceVar(p *[]int, name string, value []int, usage string) {
function IntSliceVarP (line 130) | func IntSliceVarP(p *[]int, name, shorthand string, value []int, usage s...
method IntSlice (line 136) | func (f *FlagSet) IntSlice(name string, value []int, usage string) *[]int {
method IntSliceP (line 143) | func (f *FlagSet) IntSliceP(name, shorthand string, value []int, usage s...
function IntSlice (line 151) | func IntSlice(name string, value []int, usage string) *[]int {
function IntSliceP (line 156) | func IntSliceP(name, shorthand string, value []int, usage string) *[]int {
FILE: vendor/github.com/spf13/pflag/ip.go
type ipValue (line 10) | type ipValue
method String (line 17) | func (i *ipValue) String() string { return net.IP(*i).String() }
method Set (line 18) | func (i *ipValue) Set(s string) error {
method Type (line 27) | func (i *ipValue) Type() string {
function newIPValue (line 12) | func newIPValue(val net.IP, p *net.IP) *ipValue {
function ipConv (line 31) | func ipConv(sval string) (interface{}, error) {
method GetIP (line 40) | func (f *FlagSet) GetIP(name string) (net.IP, error) {
method IPVar (line 50) | func (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage stri...
method IPVarP (line 55) | func (f *FlagSet) IPVarP(p *net.IP, name, shorthand string, value net.IP...
function IPVar (line 61) | func IPVar(p *net.IP, name string, value net.IP, usage string) {
function IPVarP (line 66) | func IPVarP(p *net.IP, name, shorthand string, value net.IP, usage strin...
method IP (line 72) | func (f *FlagSet) IP(name string, value net.IP, usage string) *net.IP {
method IPP (line 79) | func (f *FlagSet) IPP(name, shorthand string, value net.IP, usage string...
function IP (line 87) | func IP(name string, value net.IP, usage string) *net.IP {
function IPP (line 92) | func IPP(name, shorthand string, value net.IP, usage string) *net.IP {
FILE: vendor/github.com/spf13/pflag/ip_slice.go
type ipSliceValue (line 11) | type ipSliceValue struct
method Set (line 25) | func (s *ipSliceValue) Set(val string) error {
method Type (line 58) | func (s *ipSliceValue) Type() string {
method String (line 63) | func (s *ipSliceValue) String() string {
method fromString (line 75) | func (s *ipSliceValue) fromString(val string) (net.IP, error) {
method toString (line 79) | func (s *ipSliceValue) toString(val net.IP) string {
method Append (line 83) | func (s *ipSliceValue) Append(val string) error {
method Replace (line 92) | func (s *ipSliceValue) Replace(val []string) error {
method GetSlice (line 105) | func (s *ipSliceValue) GetSlice() []string {
function newIPSliceValue (line 16) | func newIPSliceValue(val []net.IP, p *[]net.IP) *ipSliceValue {
function ipSliceConv (line 113) | func ipSliceConv(val string) (interface{}, error) {
method GetIPSlice (line 132) | func (f *FlagSet) GetIPSlice(name string) ([]net.IP, error) {
method IPSliceVar (line 142) | func (f *FlagSet) IPSliceVar(p *[]net.IP, name string, value []net.IP, u...
method IPSliceVarP (line 147) | func (f *FlagSet) IPSliceVarP(p *[]net.IP, name, shorthand string, value...
function IPSliceVar (line 153) | func IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {
function IPSliceVarP (line 158) | func IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, us...
method IPSlice (line 164) | func (f *FlagSet) IPSlice(name string, value []net.IP, usage string) *[]...
method IPSliceP (line 171) | func (f *FlagSet) IPSliceP(name, shorthand string, value []net.IP, usage...
function IPSlice (line 179) | func IPSlice(name string, value []net.IP, usage string) *[]net.IP {
function IPSliceP (line 184) | func IPSliceP(name, shorthand string, value []net.IP, usage string) *[]n...
FILE: vendor/github.com/spf13/pflag/ipmask.go
type ipMaskValue (line 10) | type ipMaskValue
method String (line 17) | func (i *ipMaskValue) String() string { return net.IPMask(*i).String() }
method Set (line 18) | func (i *ipMaskValue) Set(s string) error {
method Type (line 27) | func (i *ipMaskValue) Type() string {
function newIPMaskValue (line 12) | func newIPMaskValue(val net.IPMask, p *net.IPMask) *ipMaskValue {
function ParseIPv4Mask (line 33) | func ParseIPv4Mask(s string) net.IPMask {
function parseIPv4Mask (line 59) | func parseIPv4Mask(sval string) (interface{}, error) {
method GetIPv4Mask (line 68) | func (f *FlagSet) GetIPv4Mask(name string) (net.IPMask, error) {
method IPMaskVar (line 78) | func (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask...
method IPMaskVarP (line 83) | func (f *FlagSet) IPMaskVarP(p *net.IPMask, name, shorthand string, valu...
function IPMaskVar (line 89) | func IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage strin...
function IPMaskVarP (line 94) | func IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask,...
method IPMask (line 100) | func (f *FlagSet) IPMask(name string, value net.IPMask, usage string) *n...
method IPMaskP (line 107) | func (f *FlagSet) IPMaskP(name, shorthand string, value net.IPMask, usag...
function IPMask (line 115) | func IPMask(name string, value net.IPMask, usage string) *net.IPMask {
function IPMaskP (line 120) | func IPMaskP(name, shorthand string, value net.IPMask, usage string) *ne...
FILE: vendor/github.com/spf13/pflag/ipnet.go
type ipNetValue (line 10) | type ipNetValue
method String (line 12) | func (ipnet ipNetValue) String() string {
method Set (line 17) | func (ipnet *ipNetValue) Set(value string) error {
method Type (line 26) | func (*ipNetValue) Type() string {
function newIPNetValue (line 30) | func newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue {
function ipNetConv (line 35) | func ipNetConv(sval string) (interface{}, error) {
method GetIPNet (line 44) | func (f *FlagSet) GetIPNet(name string) (net.IPNet, error) {
method IPNetVar (line 54) | func (f *FlagSet) IPNetVar(p *net.IPNet, name string, value net.IPNet, u...
method IPNetVarP (line 59) | func (f *FlagSet) IPNetVarP(p *net.IPNet, name, shorthand string, value ...
function IPNetVar (line 65) | func IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {
function IPNetVarP (line 70) | func IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, us...
method IPNet (line 76) | func (f *FlagSet) IPNet(name string, value net.IPNet, usage string) *net...
method IPNetP (line 83) | func (f *FlagSet) IPNetP(name, shorthand string, value net.IPNet, usage ...
function IPNet (line 91) | func IPNet(name string, value net.IPNet, usage string) *net.IPNet {
function IPNetP (line 96) | func IPNetP(name, shorthand string, value net.IPNet, usage string) *net....
FILE: vendor/github.com/spf13/pflag/string.go
type stringValue (line 4) | type stringValue
method Set (line 11) | func (s *stringValue) Set(val string) error {
method Type (line 15) | func (s *stringValue) Type() string {
method String (line 19) | func (s *stringValue) String() string { return string(*s) }
function newStringValue (line 6) | func newStringValue(val string, p *string) *stringValue {
function stringConv (line 21) | func stringConv(sval string) (interface{}, error) {
method GetString (line 26) | func (f *FlagSet) GetString(name string) (string, error) {
method StringVar (line 36) | func (f *FlagSet) StringVar(p *string, name string, value string, usage ...
method StringVarP (line 41) | func (f *FlagSet) StringVarP(p *string, name, shorthand string, value st...
function StringVar (line 47) | func StringVar(p *string, name string, value string, usage string) {
function StringVarP (line 52) | func StringVarP(p *string, name, shorthand string, value string, usage s...
method String (line 58) | func (f *FlagSet) String(name string, value string, usage string) *string {
method StringP (line 65) | func (f *FlagSet) StringP(name, shorthand string, value string, usage st...
function String (line 73) | func String(name string, value string, usage string) *string {
function StringP (line 78) | func StringP(name, shorthand string, value string, usage string) *string {
FILE: vendor/github.com/spf13/pflag/string_array.go
type stringArrayValue (line 4) | type stringArrayValue struct
method Set (line 16) | func (s *stringArrayValue) Set(val string) error {
method Append (line 26) | func (s *stringArrayValue) Append(val string) error {
method Replace (line 31) | func (s *stringArrayValue) Replace(val []string) error {
method GetSlice (line 44) | func (s *stringArrayValue) GetSlice() []string {
method Type (line 52) | func (s *stringArrayValue) Type() string {
method String (line 56) | func (s *stringArrayValue) String() string {
function newStringArrayValue (line 9) | func newStringArrayValue(val []string, p *[]string) *stringArrayValue {
function stringArrayConv (line 61) | func stringArrayConv(sval string) (interface{}, error) {
method GetStringArray (line 71) | func (f *FlagSet) GetStringArray(name string) ([]string, error) {
method StringArrayVar (line 82) | func (f *FlagSet) StringArrayVar(p *[]string, name string, value []strin...
method StringArrayVarP (line 87) | func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, v...
function StringArrayVar (line 94) | func StringArrayVar(p *[]string, name string, value []string, usage stri...
function StringArrayVarP (line 99) | func StringArrayVarP(p *[]string, name, shorthand string, value []string...
method StringArray (line 106) | func (f *FlagSet) StringArray(name string, value []string, usage string)...
method StringArrayP (line 113) | func (f *FlagSet) StringArrayP(name, shorthand string, value []string, u...
function StringArray (line 122) | func StringArray(name string, value []string, usage string) *[]string {
function StringArrayP (line 127) | func StringArrayP(name, shorthand string, value []string, usage string) ...
FILE: vendor/github.com/spf13/pflag/string_slice.go
type stringSliceValue (line 10) | type stringSliceValue struct
method Set (line 42) | func (s *stringSliceValue) Set(val string) error {
method Type (line 56) | func (s *stringSliceValue) Type() string {
method String (line 60) | func (s *stringSliceValue) String() string {
method Append (line 65) | func (s *stringSliceValue) Append(val string) error {
method Replace (line 70) | func (s *stringSliceValue) Replace(val []string) error {
method GetSlice (line 75) | func (s *stringSliceValue) GetSlice() []string {
function newStringSliceValue (line 15) | func newStringSliceValue(val []string, p *[]string) *stringSliceValue {
function readAsCSV (line 22) | func readAsCSV(val string) ([]string, error) {
function writeAsCSV (line 31) | func writeAsCSV(vals []string) (string, error) {
function stringSliceConv (line 79) | func stringSliceConv(sval string) (interface{}, error) {
method GetStringSlice (line 89) | func (f *FlagSet) GetStringSlice(name string) ([]string, error) {
method StringSliceVar (line 104) | func (f *FlagSet) StringSliceVar(p *[]string, name string, value []strin...
method StringSliceVarP (line 109) | func (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, v...
function StringSliceVar (line 120) | func StringSliceVar(p *[]string, name string, value []string, usage stri...
function StringSliceVarP (line 125) | func StringSliceVarP(p *[]string, name, shorthand string, value []string...
method StringSlice (line 136) | func (f *FlagSet) StringSlice(name string, value []string, usage string)...
method StringSliceP (line 143) | func (f *FlagSet) StringSliceP(name, shorthand string, value []string, u...
function StringSlice (line 156) | func StringSlice(name string, value []string, usage string) *[]string {
function StringSliceP (line 161) | func StringSliceP(name, shorthand string, value []string, usage string) ...
FILE: vendor/github.com/spf13/pflag/string_to_int.go
type stringToIntValue (line 11) | type stringToIntValue struct
method Set (line 24) | func (s *stringToIntValue) Set(val string) error {
method Type (line 49) | func (s *stringToIntValue) Type() string {
method String (line 53) | func (s *stringToIntValue) String() string {
function newStringToIntValue (line 16) | func newStringToIntValue(val map[string]int, p *map[string]int) *stringT...
function stringToIntConv (line 68) | func stringToIntConv(val string) (interface{}, error) {
method GetStringToInt (line 91) | func (f *FlagSet) GetStringToInt(name string) (map[string]int, error) {
method StringToIntVar (line 102) | func (f *FlagSet) StringToIntVar(p *map[string]int, name string, value m...
method StringToIntVarP (line 107) | func (f *FlagSet) StringToIntVarP(p *map[string]int, name, shorthand str...
function StringToIntVar (line 114) | func StringToIntVar(p *map[string]int, name string, value map[string]int...
function StringToIntVarP (line 119) | func StringToIntVarP(p *map[string]int, name, shorthand string, value ma...
method StringToInt (line 126) | func (f *FlagSet) StringToInt(name string, value map[string]int, usage s...
method StringToIntP (line 133) | func (f *FlagSet) StringToIntP(name, shorthand string, value map[string]...
function StringToInt (line 142) | func StringToInt(name string, value map[string]int, usage string) *map[s...
function StringToIntP (line 147) | func StringToIntP(name, shorthand string, value map[string]int, usage st...
FILE: vendor/github.com/spf13/pflag/string_to_int64.go
type stringToInt64Value (line 11) | type stringToInt64Value struct
method Set (line 24) | func (s *stringToInt64Value) Set(val string) error {
method Type (line 49) | func (s *stringToInt64Value) Type() string {
method String (line 53) | func (s *stringToInt64Value) String() string {
function newStringToInt64Value (line 16) | func newStringToInt64Value(val map[string]int64, p *map[string]int64) *s...
function stringToInt64Conv (line 68) | func stringToInt64Conv(val string) (interface{}, error) {
method GetStringToInt64 (line 91) | func (f *FlagSet) GetStringToInt64(name string) (map[string]int64, error) {
method StringToInt64Var (line 102) | func (f *FlagSet) StringToInt64Var(p *map[string]int64, name string, val...
method StringToInt64VarP (line 107) | func (f *FlagSet) StringToInt64VarP(p *map[string]int64, name, shorthand...
function StringToInt64Var (line 114) | func StringToInt64Var(p *map[string]int64, name string, value map[string...
function StringToInt64VarP (line 119) | func StringToInt64VarP(p *map[string]int64, name, shorthand string, valu...
method StringToInt64 (line 126) | func (f *FlagSet) StringToInt64(name string, value map[string]int64, usa...
method StringToInt64P (line 133) | func (f *FlagSet) StringToInt64P(name, shorthand string, value map[strin...
function StringToInt64 (line 142) | func StringToInt64(name string, value map[string]int64, usage string) *m...
function StringToInt64P (line 147) | func StringToInt64P(name, shorthand string, value map[string]int64, usag...
FILE: vendor/github.com/spf13/pflag/string_to_string.go
type stringToStringValue (line 11) | type stringToStringValue struct
method Set (line 24) | func (s *stringToStringValue) Set(val string) error {
method Type (line 60) | func (s *stringToStringValue) Type() string {
method String (line 64) | func (s *stringToStringValue) String() string {
function newStringToStringValue (line 16) | func newStringToStringValue(val map[string]string, p *map[string]string)...
function stringToStringConv (line 79) | func stringToStringConv(val string) (interface{}, error) {
method GetStringToString (line 102) | func (f *FlagSet) GetStringToString(name string) (map[string]string, err...
method StringToStringVar (line 113) | func (f *FlagSet) StringToStringVar(p *map[string]string, name string, v...
method StringToStringVarP (line 118) | func (f *FlagSet) StringToStringVarP(p *map[string]string, name, shortha...
function StringToStringVar (line 125) | func StringToStringVar(p *map[string]string, name string, value map[stri...
function StringToStringVarP (line 130) | func StringToStringVarP(p *map[string]string, name, shorthand string, va...
method StringToString (line 137) | func (f *FlagSet) StringToString(name string, value map[string]string, u...
method StringToStringP (line 144) | func (f *FlagSet) StringToStringP(name, shorthand string, value map[stri...
function StringToString (line 153) | func StringToString(name string, value map[string]string, usage string) ...
function StringToStringP (line 158) | func StringToStringP(name, shorthand string, value map[string]string, us...
FILE: vendor/github.com/spf13/pflag/uint.go
type uintValue (line 6) | type uintValue
method Set (line 13) | func (i *uintValue) Set(s string) error {
method Type (line 19) | func (i *uintValue) Type() string {
method String (line 23) | func (i *uintValue) String() string { return strconv.FormatUint(uint64...
function newUintValue (line 8) | func newUintValue(val uint, p *uint) *uintValue {
function uintConv (line 25) | func uintConv(sval string) (interface{}, error) {
method GetUint (line 34) | func (f *FlagSet) GetUint(name string) (uint, error) {
method UintVar (line 44) | func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {
method UintVarP (line 49) | func (f *FlagSet) UintVarP(p *uint, name, shorthand string, value uint, ...
function UintVar (line 55) | func UintVar(p *uint, name string, value uint, usage string) {
function UintVarP (line 60) | func UintVarP(p *uint, name, shorthand string, value uint, usage string) {
method Uint (line 66) | func (f *FlagSet) Uint(name string, value uint, usage string) *uint {
method UintP (line 73) | func (f *FlagSet) UintP(name, shorthand string, value uint, usage string...
function Uint (line 81) | func Uint(name string, value uint, usage string) *uint {
function UintP (line 86) | func UintP(name, shorthand string, value uint, usage string) *uint {
FILE: vendor/github.com/spf13/pflag/uint16.go
type uint16Value (line 6) | type uint16Value
method Set (line 13) | func (i *uint16Value) Set(s string) error {
method Type (line 19) | func (i *uint16Value) Type() string {
method String (line 23) | func (i *uint16Value) String() string { return strconv.FormatUint(uint...
function newUint16Value (line 8) | func newUint16Value(val uint16, p *uint16) *uint16Value {
function uint16Conv (line 25) | func uint16Conv(sval string) (interface{}, error) {
method GetUint16 (line 34) | func (f *FlagSet) GetUint16(name string) (uint16, error) {
method Uint16Var (line 44) | func (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage ...
method Uint16VarP (line 49) | func (f *FlagSet) Uint16VarP(p *uint16, name, shorthand string, value ui...
function Uint16Var (line 55) | func Uint16Var(p *uint16, name string, value uint16, usage string) {
function Uint16VarP (line 60) | func Uint16VarP(p *uint16, name, shorthand string, value uint16, usage s...
method Uint16 (line 66) | func (f *FlagSet) Uint16(name string, value uint16, usage string) *uint16 {
method Uint16P (line 73) | func (f *FlagSet) Uint16P(name, shorthand string, value uint16, usage st...
function Uint16 (line 81) | func Uint16(name string, value uint16, usage string) *uint16 {
function Uint16P (line 86) | func Uint16P(name, shorthand string, value uint16, usage string) *uint16 {
FILE: vendor/github.com/spf13/pflag/uint32.go
type uint32Value (line 6) | type uint32Value
method Set (line 13) | func (i *uint32Value) Set(s string) error {
method Type (line 19) | func (i *uint32Value) Type() string {
method String (line 23) | func (i *uint32Value) String() string { return strconv.FormatUint(uint...
function newUint32Value (line 8) | func newUint32Value(val uint32, p *uint32) *uint32Value {
function uint32Conv (line 25) | func uint32Conv(sval string) (interface{}, error) {
method GetUint32 (line 34) | func (f *FlagSet) GetUint32(name string) (uint32, error) {
method Uint32Var (line 44) | func (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage ...
method Uint32VarP (line 49) | func (f *FlagSet) Uint32VarP(p *uint32, name, shorthand string, value ui...
function Uint32Var (line 55) | func Uint32Var(p *uint32, name string, value uint32, usage string) {
function Uint32VarP (line 60) | func Uint32VarP(p *uint32, name, shorthand string, value uint32, usage s...
method Uint32 (line 66) | func (f *FlagSet) Uint32(name string, value uint32, usage string) *uint32 {
method Uint32P (line 73) | func (f *FlagSet) Uint32P(name, shorthand string, value uint32, usage st...
function Uint32 (line 81) | func Uint32(name string, value uint32, usage string) *uint32 {
function Uint32P (line 86) | func Uint32P(name, shorthand string, value uint32, usage string) *uint32 {
FILE: vendor/github.com/spf13/pflag/uint64.go
type uint64Value (line 6) | type uint64Value
method Set (line 13) | func (i *uint64Value) Set(s string) error {
method Type (line 19) | func (i *uint64Value) Type() string {
method String (line 23) | func (i *uint64Value) String() string { return strconv.FormatUint(uint...
function newUint64Value (line 8) | func newUint64Value(val uint64, p *uint64) *uint64Value {
function uint64Conv (line 25) | func uint64Conv(sval string) (interface{}, error) {
method GetUint64 (line 34) | func (f *FlagSet) GetUint64(name string) (uint64, error) {
method Uint64Var (line 44) | func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage ...
method Uint64VarP (line 49) | func (f *FlagSet) Uint64VarP(p *uint64, name, shorthand string, value ui...
function Uint64Var (line 55) | func Uint64Var(p *uint64, name string, value uint64, usage string) {
function Uint64VarP (line 60) | func Uint64VarP(p *uint64, name, shorthand string, value uint64, usage s...
method Uint64 (line 66) | func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {
method Uint64P (line 73) | func (f *FlagSet) Uint64P(name, shorthand string, value uint64, usage st...
function Uint64 (line 81) | func Uint64(name string, value uint64, usage string) *uint64 {
function Uint64P (line 86) | func Uint64P(name, shorthand string, value uint64, usage string) *uint64 {
FILE: vendor/github.com/spf13/pflag/uint8.go
type uint8Value (line 6) | type uint8Value
method Set (line 13) | func (i *uint8Value) Set(s string) error {
method Type (line 19) | func (i *uint8Value) Type() string {
method String (line 23) | func (i *uint8Value) String() string { return strconv.FormatUint(uint6...
function newUint8Value (line 8) | func newUint8Value(val uint8, p *uint8) *uint8Value {
function uint8Conv (line 25) | func uint8Conv(sval string) (interface{}, error) {
method GetUint8 (line 34) | func (f *FlagSet) GetUint8(name string) (uint8, error) {
method Uint8Var (line 44) | func (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage str...
method Uint8VarP (line 49) | func (f *FlagSet) Uint8VarP(p *uint8, name, shorthand string, value uint...
function Uint8Var (line 55) | func Uint8Var(p *uint8, name string, value uint8, usage string) {
function Uint8VarP (line 60) | func Uint8VarP(p *uint8, name, shorthand string, value uint8, usage stri...
method Uint8 (line 66) | func (f *FlagSet) Uint8(name string, value uint8, usage string) *uint8 {
method Uint8P (line 73) | func (f *FlagSet) Uint8P(name, shorthand string, value uint8, usage stri...
function Uint8 (line 81) | func Uint8(name string, value uint8, usage string) *uint8 {
function Uint8P (line 86) | func Uint8P(name, shorthand string, value uint8, usage string) *uint8 {
FILE: vendor/github.com/spf13/pflag/uint_slice.go
type uintSliceValue (line 10) | type uintSliceValue struct
method Set (line 22) | func (s *uintSliceValue) Set(val string) error {
method Type (line 41) | func (s *uintSliceValue) Type() string {
method String (line 45) | func (s *uintSliceValue) String() string {
method fromString (line 53) | func (s *uintSliceValue) fromString(val string) (uint, error) {
method toString (line 61) | func (s *uintSliceValue) toString(val uint) string {
method Append (line 65) | func (s *uintSliceValue) Append(val string) error {
method Replace (line 74) | func (s *uintSliceValue) Replace(val []string) error {
method GetSlice (line 87) | func (s *uintSliceValue) GetSlice() []string {
function newUintSliceValue (line 15) | func newUintSliceValue(val []uint, p *[]uint) *uintSliceValue {
function uintSliceConv (line 95) | func uintSliceConv(val string) (interface{}, error) {
method GetUintSlice (line 114) | func (f *FlagSet) GetUintSlice(name string) ([]uint, error) {
method UintSliceVar (line 124) | func (f *FlagSet) UintSliceVar(p *[]uint, name string, value []uint, usa...
method UintSliceVarP (line 129) | func (f *FlagSet) UintSliceVarP(p *[]uint, name, shorthand string, value...
function UintSliceVar (line 135) | func UintSliceVar(p *[]uint, name string, value []uint, usage string) {
function UintSliceVarP (line 140) | func UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usag...
method UintSlice (line 146) | func (f *FlagSet) UintSlice(name string, value []uint, usage string) *[]...
method UintSliceP (line 153) | func (f *FlagSet) UintSliceP(name, shorthand string, value []uint, usage...
function UintSlice (line 161) | func UintSlice(name string, value []uint, usage string) *[]uint {
function UintSliceP (line 166) | func UintSliceP(name, shorthand string, value []uint, usage string) *[]u...
FILE: vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go
type Slice (line 19) | type Slice struct
type String (line 27) | type String struct
FILE: vendor/golang.org/x/sys/unix/affinity_linux.go
constant cpuSetSize (line 14) | cpuSetSize = _CPU_SETSIZE / _NCPUBITS
type CPUSet (line 17) | type CPUSet
method Zero (line 40) | func (s *CPUSet) Zero() {
method Set (line 55) | func (s *CPUSet) Set(cpu int) {
method Clear (line 63) | func (s *CPUSet) Clear(cpu int) {
method IsSet (line 71) | func (s *CPUSet) IsSet(cpu int) bool {
method Count (line 80) | func (s *CPUSet) Count() int {
function schedAffinity (line 19) | func schedAffinity(trap uintptr, pid int, set *CPUSet) error {
function SchedGetaffinity (line 29) | func SchedGetaffinity(pid int, set *CPUSet) error {
function SchedSetaffinity (line 35) | func SchedSetaffinity(pid int, set *CPUSet) error {
function cpuBitsIndex (line 46) | func cpuBitsIndex(cpu int) int {
function cpuBitsMask (line 50) | func cpuBitsMask(cpu int) cpuMask {
FILE: vendor/golang.org/x/sys/unix/bluetooth_linux.go
constant BTPROTO_L2CAP (line 11) | BTPROTO_L2CAP = 0
constant BTPROTO_HCI (line 12) | BTPROTO_HCI = 1
constant BTPROTO_SCO (line 13) | BTPROTO_SCO = 2
constant BTPROTO_RFCOMM (line 14) | BTPROTO_RFCOMM = 3
constant BTPROTO_BNEP (line 15) | BTPROTO_BNEP = 4
constant BTPROTO_CMTP (line 16) | BTPROTO_CMTP = 5
constant BTPROTO_HIDP (line 17) | BTPROTO_HIDP = 6
constant BTPROTO_AVDTP (line 18) | BTPROTO_AVDTP = 7
constant HCI_CHANNEL_RAW (line 22) | HCI_CHANNEL_RAW = 0
constant HCI_CHANNEL_USER (line 23) | HCI_CHANNEL_USER = 1
constant HCI_CHANNEL_MONITOR (line 24) | HCI_CHANNEL_MONITOR = 2
constant HCI_CHANNEL_CONTROL (line 25) | HCI_CHANNEL_CONTROL = 3
constant HCI_CHANNEL_LOGGING (line 26) | HCI_CHANNEL_LOGGING = 4
constant SOL_BLUETOOTH (line 31) | SOL_BLUETOOTH = 0x112
constant SOL_HCI (line 32) | SOL_HCI = 0x0
constant SOL_L2CAP (line 33) | SOL_L2CAP = 0x6
constant SOL_RFCOMM (line 34) | SOL_RFCOMM = 0x12
constant SOL_SCO (line 35) | SOL_SCO = 0x11
FILE: vendor/golang.org/x/sys/unix/cap_freebsd.go
constant capRightsGoVersion (line 19) | capRightsGoVersion = CAP_RIGHTS_VERSION_00
constant capArSizeMin (line 20) | capArSizeMin = CAP_RIGHTS_VERSION_00 + 2
constant capArSizeMax (line 21) | capArSizeMax = capRightsGoVersion + 2
function capidxbit (line 31) | func capidxbit(right uint64) int {
function rightToIndex (line 35) | func rightToIndex(right uint64) (int, error) {
function caprver (line 43) | func caprver(right uint64) int {
function capver (line 47) | func capver(rights *CapRights) int {
function caparsize (line 51) | func caparsize(rights *CapRights) int {
function CapRightsSet (line 56) | func CapRightsSe
Condensed preview — 612 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,061K chars).
[
{
"path": ".github/workflows/go.yaml",
"chars": 544,
"preview": "# This workflow will build a golang project\n# For more information see: https://docs.github.com/en/actions/automating-bu"
},
{
"path": ".gitignore",
"chars": 83,
"preview": "# ide\n.idea\n\n# development\n.env\n.DS_Store\n\n# testing\n*.out\ncoverage.xml\nreport.xml\n"
},
{
"path": "LICENSE",
"chars": 0,
"preview": ""
},
{
"path": "README.md",
"chars": 6338,
"preview": "<p align=\"center\">\n <picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/img/goro.logo-dark.pn"
},
{
"path": "cmd/init.go",
"chars": 385,
"preview": "package cmd\n\nimport (\n\t\"github.com/hanagantig/goro/internal/commands\"\n\t\"github.com/spf13/cobra\"\n)\n\n// initCmd represents"
},
{
"path": "cmd/root.go",
"chars": 550,
"preview": "package cmd\n\nimport (\n\t\"os\"\n\n\t\"github.com/spf13/cobra\"\n)\n\nvar goroCnf string\n\n// rootCmd represents the base command whe"
},
{
"path": "cmd/update.go",
"chars": 337,
"preview": "package cmd\n\nimport (\n\t\"github.com/hanagantig/goro/internal/commands\"\n\t\"github.com/spf13/cobra\"\n)\n\n// initCmd represents"
},
{
"path": "example/testapp/cmd/http.go",
"chars": 404,
"preview": "package cmd\n\nimport (\n\t\"github.com/spf13/cobra\"\n\t\"testapp/internal/app\"\n)\n\nfunc RunHTTP() *cobra.Command {\n\tcmd := &cobr"
},
{
"path": "example/testapp/config/app.conf.yaml",
"chars": 124,
"preview": "http:\n port: 8095\n host: \"localhost\"\n read_timeout: \"3s\"\n write_timeout: \"3s\"\n\nmain_db:\n port: 3306\n host: \"localh"
},
{
"path": "example/testapp/go.mod",
"chars": 1458,
"preview": "module testapp\n\ngo 1.21.4\n\nrequire (\n\tgithub.com/go-sql-driver/mysql v1.7.1\n\tgithub.com/google/uuid v1.4.0\n\tgithub.com/g"
},
{
"path": "example/testapp/go.sum",
"chars": 51662,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "example/testapp/goro.yaml",
"chars": 850,
"preview": "app:\n name: testapp\n module: testapp\n work_dir: \"\"\n\nstorages:\n - mysql\n - mysqlx\n - pgsqlx\n - http\n\nhandlers:\n -"
},
{
"path": "example/testapp/internal/adapter/httprepo/ordersrepo/get_by_id.go",
"chars": 161,
"preview": "package ordersrepo\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) GetByID(ctx context.Context) {\n\t// TODO: put your reposi"
},
{
"path": "example/testapp/internal/adapter/httprepo/ordersrepo/repository.go",
"chars": 266,
"preview": "// Code generated by goro;\n\npackage ordersrepo\n\n// This file was generated by the goro tool.\n\nimport (\n\t\"net/http\"\n)\n\nty"
},
{
"path": "example/testapp/internal/adapter/mysqlrepo/myrepo/get_all.go",
"chars": 156,
"preview": "package myrepo\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) GetAll(ctx context.Context) {\n\t// TODO: put your repository "
},
{
"path": "example/testapp/internal/adapter/mysqlrepo/myrepo/get_one.go",
"chars": 156,
"preview": "package myrepo\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) GetOne(ctx context.Context) {\n\t// TODO: put your repository "
},
{
"path": "example/testapp/internal/adapter/mysqlrepo/myrepo/repository.go",
"chars": 314,
"preview": "// Code generated by goro;\n\npackage myrepo\n\n// This file was generated by the goro tool.\n\nimport (\n\t\"database/sql\"\n\n\t\"te"
},
{
"path": "example/testapp/internal/adapter/mysqlrepo/myrepo/save.go",
"chars": 154,
"preview": "package myrepo\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) Save(ctx context.Context) {\n\t// TODO: put your repository lo"
},
{
"path": "example/testapp/internal/adapter/mysqlrepo/transactor.go",
"chars": 1708,
"preview": "package mysqlrepo\n\nimport (\n\t\"context\"\n\n\t\"database/sql\"\n\t\"errors\"\n\t\"github.com/google/uuid\"\n)\n\ntype contextKey string\n\nc"
},
{
"path": "example/testapp/internal/adapter/mysqlxrepo/clientrepo/get_by_id.go",
"chars": 161,
"preview": "package clientrepo\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) GetByID(ctx context.Context) {\n\t// TODO: put your reposi"
},
{
"path": "example/testapp/internal/adapter/mysqlxrepo/clientrepo/git_by_date.go",
"chars": 163,
"preview": "package clientrepo\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) GitByDate(ctx context.Context) {\n\t// TODO: put your repo"
},
{
"path": "example/testapp/internal/adapter/mysqlxrepo/clientrepo/repository.go",
"chars": 333,
"preview": "// Code generated by goro;\n\npackage clientrepo\n\n// This file was generated by the goro tool.\n\nimport (\n\t\"github.com/jmoi"
},
{
"path": "example/testapp/internal/adapter/mysqlxrepo/transactor.go",
"chars": 1724,
"preview": "package mysqlxrepo\n\nimport (\n\t\"context\"\n\n\t\"errors\"\n\t\"github.com/google/uuid\"\n\t\"github.com/jmoiron/sqlx\"\n)\n\ntype contextK"
},
{
"path": "example/testapp/internal/adapter/pgsqlxrepo/transactor.go",
"chars": 1724,
"preview": "package pgsqlxrepo\n\nimport (\n\t\"context\"\n\n\t\"errors\"\n\t\"github.com/google/uuid\"\n\t\"github.com/jmoiron/sqlx\"\n)\n\ntype contextK"
},
{
"path": "example/testapp/internal/adapter/pgsqlxrepo/userrepo/get_by_id.go",
"chars": 159,
"preview": "package userrepo\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) GetByID(ctx context.Context) {\n\t// TODO: put your reposito"
},
{
"path": "example/testapp/internal/adapter/pgsqlxrepo/userrepo/repository.go",
"chars": 331,
"preview": "// Code generated by goro;\n\npackage userrepo\n\n// This file was generated by the goro tool.\n\nimport (\n\t\"github.com/jmoiro"
},
{
"path": "example/testapp/internal/app/app.go",
"chars": 1693,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "example/testapp/internal/app/container.go",
"chars": 2102,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "example/testapp/internal/app/database.go",
"chars": 3726,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "example/testapp/internal/app/http.go",
"chars": 1300,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "example/testapp/internal/app/logger.go",
"chars": 328,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "example/testapp/internal/config/config.go",
"chars": 2336,
"preview": "package config\n\nimport (\n\t\"github.com/spf13/viper\"\n\t\"time\"\n)\n\ntype AppConfig struct {\n\tName string\n\tEnv string\n\tV"
},
{
"path": "example/testapp/internal/handler/http/api/v1/handler.go",
"chars": 450,
"preview": "package v1\n\nimport (\n\t\"context\"\n\t\"testapp/pkg/logger\"\n)\n\ntype UseCase interface {\n\tGetClients(ctx context.Context) (inte"
},
{
"path": "example/testapp/internal/handler/http/api/v1/pong.go",
"chars": 355,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"go.uber.org/zap\"\n\t\"net/http\"\n)\n\nfunc (h Handler) Ping(w http.ResponseWriter, r *"
},
{
"path": "example/testapp/internal/handler/http/api/v1/router.go",
"chars": 278,
"preview": "package v1\n\nimport (\n\t\"github.com/gorilla/mux\"\n\t\"net/http\"\n)\n\nfunc (h *Handler) GetVersion() string {\n\treturn \"v1\"\n}\n\nfu"
},
{
"path": "example/testapp/internal/handler/http/http.go",
"chars": 726,
"preview": "package http\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"testapp/internal/config\"\n)\n\ntype Server struct {\n\tsrv *http.Serve"
},
{
"path": "example/testapp/internal/handler/http/router.go",
"chars": 1981,
"preview": "package http\n\nimport (\n\t\"github.com/gorilla/mux\"\n\t\"net/http\"\n\t\"net/http/pprof\"\n\t\"testapp/pkg/logger\"\n\t\"testapp/pkg/middl"
},
{
"path": "example/testapp/internal/service/myservice/get_by_filter.go",
"chars": 160,
"preview": "package myservice\n\nimport (\n\t\"context\"\n)\n\nfunc (s *Service) GetByFilter(ctx context.Context) {\n\n\t// TODO: put your busin"
},
{
"path": "example/testapp/internal/service/myservice/get_list.go",
"chars": 156,
"preview": "package myservice\n\nimport (\n\t\"context\"\n)\n\nfunc (s *Service) GetList(ctx context.Context) {\n\n\t// TODO: put your business "
},
{
"path": "example/testapp/internal/service/myservice/service.go",
"chars": 365,
"preview": "// Code generated by goro;\n\npackage myservice\n\n// This file was generated by the goro tool.\n\nimport (\n\t\"testapp/internal"
},
{
"path": "example/testapp/internal/service/orderservice/get_by_id.go",
"chars": 159,
"preview": "package orderservice\n\nimport (\n\t\"context\"\n)\n\nfunc (s *Service) GetByID(ctx context.Context) {\n\n\t// TODO: put your busine"
},
{
"path": "example/testapp/internal/service/orderservice/service.go",
"chars": 336,
"preview": "// Code generated by goro;\n\npackage orderservice\n\n// This file was generated by the goro tool.\n\ntype ordersRepo interfac"
},
{
"path": "example/testapp/internal/service/pingpong/pong.go",
"chars": 152,
"preview": "package pingpong\n\nimport (\n\t\"context\"\n)\n\nfunc (s *Service) Pong(ctx context.Context) {\n\n\t// TODO: put your business logi"
},
{
"path": "example/testapp/internal/service/pingpong/service.go",
"chars": 364,
"preview": "// Code generated by goro;\n\npackage pingpong\n\n// This file was generated by the goro tool.\n\nimport (\n\t\"testapp/internal/"
},
{
"path": "example/testapp/internal/service/transactor.go",
"chars": 246,
"preview": "package service\n\nimport (\n\t\"context\"\n)\n\ntype Transactor interface {\n\tNewTxContext(ctx context.Context) context.Context\n\t"
},
{
"path": "example/testapp/internal/usecase/get_clients.go",
"chars": 209,
"preview": "package usecase\n\nimport (\n\t\"context\"\n)\n\nfunc (u *UseCase) GetClients(ctx context.Context) (interface{}, error) {\n\t// TOD"
},
{
"path": "example/testapp/internal/usecase/pong.go",
"chars": 197,
"preview": "package usecase\n\nimport (\n\t\"context\"\n)\n\nfunc (u *UseCase) Pong(ctx context.Context) (interface{}, error) {\n\t// TODO: put"
},
{
"path": "example/testapp/internal/usecase/sign_in.go",
"chars": 201,
"preview": "package usecase\n\nimport (\n\t\"context\"\n)\n\nfunc (u *UseCase) SignIn(ctx context.Context) (interface{}, error) {\n\t// TODO: p"
},
{
"path": "example/testapp/internal/usecase/sign_up.go",
"chars": 201,
"preview": "package usecase\n\nimport (\n\t\"context\"\n)\n\nfunc (u *UseCase) SignUp(ctx context.Context) (interface{}, error) {\n\t// TODO: p"
},
{
"path": "example/testapp/internal/usecase/usecase.go",
"chars": 447,
"preview": "// Code generated by goro;\n\npackage usecase\n\n// This file was generated by the goro tool.\n\ntype myService interface {\n\t/"
},
{
"path": "example/testapp/main.go",
"chars": 775,
"preview": "package main\n\nimport (\n\t\"log\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"testapp/cmd\"\n\t\"testapp/internal/app\"\n)\n\n// ldflags pass vari"
},
{
"path": "example/testapp/pkg/logger/logger.go",
"chars": 302,
"preview": "package logger\n\nimport (\n\t\"go.uber.org/zap\"\n\t\"go.uber.org/zap/zapcore\"\n)\n\ntype Logger interface {\n\tDebug(string, ...zapc"
},
{
"path": "example/testapp/pkg/middleware/acces_log_test.go",
"chars": 2787,
"preview": "package middleware\n\nimport (\n\t\"bytes\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\t\"testing\"\n\n\t\"github.com/stretchr/test"
},
{
"path": "example/testapp/pkg/middleware/access_log.go",
"chars": 1630,
"preview": "package middleware\n\nimport (\n\t\"bytes\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"runtime/debug\"\n\t\"testapp/pkg/logger\"\n\t\"time\"\n)\n\nfunc Ac"
},
{
"path": "example/testapp/pkg/middleware/authorization.go",
"chars": 501,
"preview": "package middleware\n\nimport (\n\t\"net/http\"\n)\n\nvar (\n\tapiKey = \"test\"\n)\n\nfunc AuthorizationMiddleware() func(next http.Hand"
},
{
"path": "example/testapp/pkg/middleware/context.go",
"chars": 666,
"preview": "package middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"testapp/pkg/logger\"\n)\n\nfunc AddContextMiddleware(log logger.Logger"
},
{
"path": "example/testapp/pkg/middleware/context_test.go",
"chars": 516,
"preview": "package middleware\n\nimport (\n\t\"go.uber.org/zap\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testi"
},
{
"path": "example/testapp/pkg/middleware/response_writer_wrapper.go",
"chars": 1368,
"preview": "package middleware\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"net\"\n\t\"net/http\"\n)\n\n// responseWriterWrapper is used to wrap http.Resp"
},
{
"path": "go.mod",
"chars": 717,
"preview": "module github.com/hanagantig/goro\n\ngo 1.18\n\nrequire (\n\tgithub.com/fatih/color v1.13.0\n\tgithub.com/iancoleman/strcase v0."
},
{
"path": "go.sum",
"chars": 46808,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "internal/commands/init_app.go",
"chars": 1018,
"preview": "package commands\n\nimport (\n\t\"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/internal/generator"
},
{
"path": "internal/commands/update_app.go",
"chars": 1113,
"preview": "package commands\n\nimport (\n\t\"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/internal/generator"
},
{
"path": "internal/config/adapter.go",
"chars": 782,
"preview": "package config\n\nimport (\n\t\"strings\"\n)\n\ntype Adapter struct {\n\tName string `yaml:\"name\"`\n\tStorage Storage `yaml"
},
{
"path": "internal/config/data.go",
"chars": 3173,
"preview": "package config\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/manifoldco/promptui\"\n\t\"gopkg.in/yaml.v2\"\n)\n\n"
},
{
"path": "internal/config/service.go",
"chars": 1208,
"preview": "package config\n\nimport (\n\t\"strings\"\n)\n\ntype Service struct {\n\tAppModule string\n\tName string `yaml:\"name\"`\n\tMethod"
},
{
"path": "internal/config/storage.go",
"chars": 1136,
"preview": "package config\n\nvar storagePackages = map[Storage]string{\n\t\"mysql\": \"\\\"database/sql\\\"\",\n\t\"mysqlx\": \"\\\"github.com/jmoiro"
},
{
"path": "internal/config/usecase.go",
"chars": 178,
"preview": "package config\n\ntype UseCase struct {\n\tMethods []string `yaml:\"methods\"`\n\tDeps []string `yaml:\"deps\"`\n}\n\nfunc (u UseC"
},
{
"path": "internal/config/validate.go",
"chars": 1519,
"preview": "package config\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n)\n\nvar methodName = regexp.MustCompile(\"^[A-Z][A-Za-z]+$\")\n\nfunc (c *Config) V"
},
{
"path": "internal/generator/chains/fit_file_extention.go",
"chars": 928,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chains/fit_file_name.go",
"chars": 1079,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chains/generate_adapters.go",
"chars": 2771,
"preview": "package chains\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/iancoleman/strcase\"\n\n\tentity \"github.com/hanagantig/goro/"
},
{
"path": "internal/generator/chains/generate_code.go",
"chars": 1575,
"preview": "package chains\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"os\"\n\t\"strings\"\n\t\"text/template\"\n\n\tentity \"github.com/hanagantig/"
},
{
"path": "internal/generator/chains/generate_services.go",
"chars": 2251,
"preview": "package chains\n\nimport (\n\t\"os\"\n\n\t\"github.com/iancoleman/strcase\"\n\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t"
},
{
"path": "internal/generator/chains/generate_usecase.go",
"chars": 1520,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chains/mod_init.go",
"chars": 675,
"preview": "package chains\n\nimport (\n\t\"errors\"\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg"
},
{
"path": "internal/generator/chains/mod_tidy.go",
"chars": 659,
"preview": "package chains\n\nimport (\n\t\"errors\"\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg"
},
{
"path": "internal/generator/chains/save_files.go",
"chars": 963,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chains/sync_adapters.go",
"chars": 1376,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chains/sync_services.go",
"chars": 1172,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chains/sync_usecases.go",
"chars": 1061,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chains/update_files.go",
"chars": 1297,
"preview": "package chains\n\nimport (\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg/afero\"\n\t\""
},
{
"path": "internal/generator/chunks/httpchunk/build.tpl",
"chars": 92,
"preview": "func (a *App) newHttpClient() *client.Client {\n\tclient := client.Client{}\n\treturn &client\n}\n"
},
{
"path": "internal/generator/chunks/httpchunk/chunk.go",
"chars": 618,
"preview": "package httpchunk\n\nimport (\n\t_ \"embed\"\n\n\t\"github.com/hanagantig/goro/internal/config\"\n)\n\n//go:embed build.tpl\nvar buildT"
},
{
"path": "internal/generator/chunks/mysqlchunk/build.tpl",
"chars": 1483,
"preview": "func (a *App) newMySQLConnect(cfg config.SQLConfig) (*sql.DB, error) {\n builder := strings.Builder{}\n builder.Writ"
},
{
"path": "internal/generator/chunks/mysqlchunk/chunk.go",
"chars": 772,
"preview": "package mysqlchunk\n\nimport (\n\t_ \"embed\"\n\n\t\"github.com/hanagantig/goro/internal/config\"\n)\n\n//go:embed build.tpl\nvar build"
},
{
"path": "internal/generator/chunks/mysqlxchunk/build.tpl",
"chars": 1486,
"preview": "func (a *App) newMySQLxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {\n builder := strings.Builder{}\n builder.Wr"
},
{
"path": "internal/generator/chunks/mysqlxchunk/chunk.go",
"chars": 745,
"preview": "package mysqlxchunk\n\nimport (\n\t_ \"embed\"\n\n\t\"github.com/hanagantig/goro/internal/config\"\n)\n\n//go:embed build.tpl\nvar buil"
},
{
"path": "internal/generator/chunks/pgsqlxchunk/build.tpl",
"chars": 673,
"preview": "func (a *App) newPgSqlxConnect(cfg config.SQLConfig) (*sqlx.DB, error) {\n\tbuilder := strings.Builder{}\n\tbuilder.WriteStr"
},
{
"path": "internal/generator/chunks/pgsqlxchunk/chunk.go",
"chars": 708,
"preview": "package pgsqlxchunk\n\nimport (\n\t_ \"embed\"\n\n\t\"github.com/hanagantig/goro/internal/config\"\n)\n\n//go:embed build.tpl\nvar buil"
},
{
"path": "internal/generator/chunks.go",
"chars": 555,
"preview": "package generator\n\nimport (\n\t\"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/internal/generato"
},
{
"path": "internal/generator/error.go",
"chars": 94,
"preview": "package generator\n\nimport \"errors\"\n\nvar UnsupportedChunkErr = errors.New(\"unsupported chunk\")\n"
},
{
"path": "internal/generator/generator.go",
"chars": 2016,
"preview": "package generator\n\nimport (\n\t\"fmt\"\n\tentity \"github.com/hanagantig/goro/internal/config\"\n\t\"github.com/hanagantig/goro/pkg"
},
{
"path": "internal/generator/option.go",
"chars": 296,
"preview": "package generator\n\ntype Option func(generator *Generator)\n\n//func WithSkeleton(name string) Option {\n//\treturn func(g *G"
},
{
"path": "internal/generator/renderer.go",
"chars": 3305,
"preview": "package generator\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"text/template\"\n\n\t\"github.com/iancoleman/strcase\"\n\n\tentity \"github.com/ha"
},
{
"path": "internal/generator/skeleton.go",
"chars": 331,
"preview": "package generator\n\nimport \"embed\"\n\n//go:embed templates/app\nvar singleServiceTpl embed.FS\n\nvar singleServiceSkeleton = s"
},
{
"path": "internal/generator/templates/app/cmd/http.go.tmpl",
"chars": 429,
"preview": "package cmd\n\nimport (\n\t\"github.com/spf13/cobra\"\n\t\"{{ .App.Module }}/internal/app\"\n)\n\nfunc RunHTTP() *cobra.Command {\n\tcm"
},
{
"path": "internal/generator/templates/app/config/app.conf.yaml",
"chars": 124,
"preview": "http:\n port: 8095\n host: \"localhost\"\n read_timeout: \"3s\"\n write_timeout: \"3s\"\n\nmain_db:\n port: 3306\n host: \"localh"
},
{
"path": "internal/generator/templates/app/internal/adapter/method.go.tmpl",
"chars": 207,
"preview": "package {{ $.PkgName }}\n\nimport (\n\t\"context\"\n)\n\nfunc (r *Repository) {{toPublicName (toCamelCase $.MethodName)}}(ctx con"
},
{
"path": "internal/generator/templates/app/internal/adapter/repository.go.tmpl",
"chars": 786,
"preview": "// Code generated by goro;\n\npackage {{$.GetPkgName}}\n\n// This file was generated by the goro tool.\n\nimport (\n {{ $.St"
},
{
"path": "internal/generator/templates/app/internal/adapter/sql_transactor.go.tmpl",
"chars": 1860,
"preview": "package {{$.Storage.GetFolderName}}\n\nimport (\n\t\"context\"\n\n\t{{ $.Storage.GetConnImportName }}\n\t\"errors\"\n\t\"github.com/goog"
},
{
"path": "internal/generator/templates/app/internal/app/app.go.tmpl",
"chars": 1406,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "internal/generator/templates/app/internal/app/container.go.tmpl",
"chars": 1854,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "internal/generator/templates/app/internal/app/database.go.tmpl",
"chars": 319,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "internal/generator/templates/app/internal/app/http.go.tmpl",
"chars": 1290,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "internal/generator/templates/app/internal/app/logger.go.tmpl",
"chars": 338,
"preview": "// Code generated by goro; DO NOT EDIT.\n\npackage app\n\n// This file was generated by the goro tool.\n// Editing this file "
},
{
"path": "internal/generator/templates/app/internal/config/config.go.tmpl",
"chars": 2336,
"preview": "package config\n\nimport (\n\t\"github.com/spf13/viper\"\n\t\"time\"\n)\n\ntype AppConfig struct {\n\tName string\n\tEnv string\n\tV"
},
{
"path": "internal/generator/templates/app/internal/handler/http/api/v1/handler.go.tmpl",
"chars": 371,
"preview": "package v1\n\nimport (\n\t\"context\"\n\t\"{{ .App.Module }}/pkg/logger\"\n)\n\ntype UseCase interface {\n {{range $val := .UseCase"
},
{
"path": "internal/generator/templates/app/internal/handler/http/api/v1/pong.go.tmpl",
"chars": 354,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"go.uber.org/zap\"\n\t\"net/http\"\n)\n\nfunc (h Handler) Ping(w http.ResponseWriter, r *"
},
{
"path": "internal/generator/templates/app/internal/handler/http/api/v1/router.go.tmpl",
"chars": 277,
"preview": "package v1\n\nimport (\n\t\"github.com/gorilla/mux\"\n\t\"net/http\"\n)\n\nfunc (h *Handler) GetVersion() string {\n\treturn \"v1\"\n}\n\nfu"
},
{
"path": "internal/generator/templates/app/internal/handler/http/http.go.tmpl",
"chars": 748,
"preview": "package http\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"{{ .App.Module }}/internal/config\"\n\t\"net/http\"\n)\n\ntype Server struct {\n\tsrv "
},
{
"path": "internal/generator/templates/app/internal/handler/http/router.go.tmpl",
"chars": 2025,
"preview": "package http\n\nimport (\n\t\"{{ .App.Module }}/pkg/logger\"\n\t\"{{ .App.Module }}/pkg/middleware\"\n\t\"github.com/gorilla/mux\"\n\t\"n"
},
{
"path": "internal/generator/templates/app/internal/service/method.go.tmpl",
"chars": 186,
"preview": "package {{$.PkgName}}\n\nimport (\n\t\"context\"\n)\n\nfunc (s *Service) {{toCamelCase $.MethodName}}(ctx context.Context) {\n\n "
},
{
"path": "internal/generator/templates/app/internal/service/service.go.tmpl",
"chars": 1114,
"preview": "// Code generated by goro;\n\npackage {{$.Service.GetPkgName}}\n\n// This file was generated by the goro tool.\n\n{{if $.IsTrx"
},
{
"path": "internal/generator/templates/app/internal/service/transactor.go.tmpl",
"chars": 255,
"preview": "package service\n\nimport (\n\t\"context\"\n)\n\ntype Transactor interface {\n NewTxContext(ctx context.Context) context.Contex"
},
{
"path": "internal/generator/templates/app/internal/usecase/method.go.tmpl",
"chars": 243,
"preview": "package usecase\n\nimport (\n\t\"context\"\n)\n\nfunc (u *UseCase) {{toPublicName (toCamelCase $)}}(ctx context.Context) (interfa"
},
{
"path": "internal/generator/templates/app/internal/usecase/usecase.go.tmpl",
"chars": 691,
"preview": "// Code generated by goro;\n\npackage usecase\n\n// This file was generated by the goro tool.\n\n{{if .Deps}}\n {{range $val"
},
{
"path": "internal/generator/templates/app/main.go.tmpl",
"chars": 860,
"preview": "package main\n\nimport (\n\t\"log\"\n\n \"github.com/spf13/cobra\"\n\n\t\"{{ .App.Module }}/internal/app\"\n\t\"{{ .App.Module }}/cmd\"\n"
},
{
"path": "internal/generator/templates/app/pkg/logger/logger.go.tmpl",
"chars": 302,
"preview": "package logger\n\nimport (\n\t\"go.uber.org/zap\"\n\t\"go.uber.org/zap/zapcore\"\n)\n\ntype Logger interface {\n\tDebug(string, ...zapc"
},
{
"path": "internal/generator/templates/app/pkg/middleware/acces_log_test.go.tmpl",
"chars": 2787,
"preview": "package middleware\n\nimport (\n\t\"bytes\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\t\"testing\"\n\n\t\"github.com/stretchr/test"
},
{
"path": "internal/generator/templates/app/pkg/middleware/access_log.go.tmpl",
"chars": 1640,
"preview": "package middleware\n\nimport (\n\t\"bytes\"\n\t\"{{ .App.Module }}/pkg/logger\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"runtime/debug\"\n\t\"time\"\n"
},
{
"path": "internal/generator/templates/app/pkg/middleware/authorization.go.tmpl",
"chars": 501,
"preview": "package middleware\n\nimport (\n\t\"net/http\"\n)\n\nvar (\n\tapiKey = \"test\"\n)\n\nfunc AuthorizationMiddleware() func(next http.Hand"
},
{
"path": "internal/generator/templates/app/pkg/middleware/context.go.tmpl",
"chars": 676,
"preview": "package middleware\n\nimport (\n\t\"context\"\n\t\"{{ .App.Module }}/pkg/logger\"\n\t\"net/http\"\n)\n\nfunc AddContextMiddleware(log log"
},
{
"path": "internal/generator/templates/app/pkg/middleware/context_test.go.tmpl",
"chars": 516,
"preview": "package middleware\n\nimport (\n\t\"go.uber.org/zap\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testi"
},
{
"path": "internal/generator/templates/app/pkg/middleware/response_writer_wrapper.go.tmpl",
"chars": 1368,
"preview": "package middleware\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"net\"\n\t\"net/http\"\n)\n\n// responseWriterWrapper is used to wrap http.Resp"
},
{
"path": "internal/pkg/log/log.go",
"chars": 561,
"preview": "package log\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/fatih/color\"\n)\n\nfunc Success(message ...string) {\n\tgreen := "
},
{
"path": "internal/prompt/prompt.go",
"chars": 358,
"preview": "package prompt\n\nimport (\n\t\"fmt\"\n\t\"github.com/manifoldco/promptui\"\n)\n\nfunc AskAppName() (string, error) {\n\t// TODO: use i"
},
{
"path": "main.go",
"chars": 136,
"preview": "/*\nCopyright © 2022 NAME HERE <EMAIL ADDRESS>\n\n*/\npackage main\n\nimport \"github.com/hanagantig/goro/cmd\"\n\nfunc main() {\n\t"
},
{
"path": "pkg/afero/.gitignore",
"chars": 26,
"preview": "sftpfs/file1\nsftpfs/test/\n"
},
{
"path": "pkg/afero/.travis.yml",
"chars": 417,
"preview": "sudo: false\nlanguage: go\narch:\n - amd64\n - ppc64e\n\ngo:\n - \"1.14\"\n - \"1.15\"\n - \"1.16\"\n - tip\n\nos:\n - linux\n - osx\n\n"
},
{
"path": "pkg/afero/LICENSE.txt",
"chars": 10140,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "pkg/afero/README.md",
"chars": 14493,
"preview": "\n\nA"
},
{
"path": "pkg/afero/afero.go",
"chars": 3353,
"preview": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n// Copyright 2013 tsuru authors. All rights reserved.\n//\n// Licensed "
},
{
"path": "pkg/afero/appveyor.yml",
"chars": 320,
"preview": "version: '{build}'\nclone_folder: C:\\gopath\\src\\github.com\\spf13\\afero\nenvironment:\n GOPATH: C:\\gopath\nbuild_script:\n- c"
},
{
"path": "pkg/afero/basepath.go",
"chars": 6035,
"preview": "package afero\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar _ Lstater = (*BasePathFs)(nil)\n\n// T"
},
{
"path": "pkg/afero/cacheOnReadFs.go",
"chars": 7495,
"preview": "package afero\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n)\n\n// If the cache duration is 0, cache time will be unlimited, i.e. on"
},
{
"path": "pkg/afero/const_bsds.go",
"chars": 724,
"preview": "// Copyright © 2016 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/const_win_unix.go",
"chars": 780,
"preview": "// Copyright © 2016 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/copyOnWriteFs.go",
"chars": 7760,
"preview": "package afero\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n\t\"time\"\n)\n\nvar _ Lstater = (*CopyOnWriteFs)(nil)\n\n// Th"
},
{
"path": "pkg/afero/httpFs.go",
"chars": 2729,
"preview": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/iofs.go",
"chars": 6313,
"preview": "// +build go1.16\n\npackage afero\n\nimport (\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\t\"path\"\n\t\"time\"\n)\n\n// IOFS adopts afero.Fs to stdlib io/f"
},
{
"path": "pkg/afero/ioutil.go",
"chars": 7108,
"preview": "// Copyright ©2015 The Go Authors\n// Copyright ©2015 Steve Francia <spf@spf13.com>\n//\n// Licensed under the Apache Licen"
},
{
"path": "pkg/afero/lstater.go",
"chars": 1035,
"preview": "// Copyright © 2018 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/match.go",
"chars": 2868,
"preview": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n// Copyright 2009 The Go Authors. All rights reserved.\n\n// Licensed u"
},
{
"path": "pkg/afero/mem/dir.go",
"chars": 970,
"preview": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/mem/dirmap.go",
"chars": 1364,
"preview": "// Copyright © 2015 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/mem/file.go",
"chars": 7271,
"preview": "// Copyright © 2015 Steve Francia <spf@spf13.com>.\n// Copyright 2013 tsuru authors. All rights reserved.\n//\n// Licensed "
},
{
"path": "pkg/afero/memmap.go",
"chars": 9961,
"preview": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/os.go",
"chars": 2926,
"preview": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n// Copyright 2013 tsuru authors. All rights reserved.\n//\n// Licensed "
},
{
"path": "pkg/afero/path.go",
"chars": 2926,
"preview": "// Copyright ©2015 The Go Authors\n// Copyright ©2015 Steve Francia <spf@spf13.com>\n//\n// Licensed under the Apache Licen"
},
{
"path": "pkg/afero/readonlyfs.go",
"chars": 2120,
"preview": "package afero\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n)\n\nvar _ Lstater = (*ReadOnlyFs)(nil)\n\ntype ReadOnlyFs struct {\n\tsource"
},
{
"path": "pkg/afero/regexpfs.go",
"chars": 4372,
"preview": "package afero\n\nimport (\n\t\"os\"\n\t\"regexp\"\n\t\"syscall\"\n\t\"time\"\n)\n\n// The RegexpFs filters files (not directories) by regular"
},
{
"path": "pkg/afero/symlink.go",
"chars": 2039,
"preview": "// Copyright © 2018 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");"
},
{
"path": "pkg/afero/unionFile.go",
"chars": 7017,
"preview": "package afero\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n)\n\n// The UnionFile implements the afero.File interface "
},
{
"path": "pkg/afero/util.go",
"chars": 7338,
"preview": "// Copyright ©2015 Steve Francia <spf@spf13.com>\n// Portions Copyright ©2015 The Hugo Authors\n// Portions Copyright 2016"
},
{
"path": "vendor/github.com/chzyer/readline/.gitignore",
"chars": 10,
"preview": ".vscode/*\n"
},
{
"path": "vendor/github.com/chzyer/readline/.travis.yml",
"chars": 252,
"preview": "language: go\ngo:\n - 1.x\nscript:\n - GOOS=windows go install github.com/chzyer/readline/example/...\n - GOOS=linux go in"
},
{
"path": "vendor/github.com/chzyer/readline/CHANGELOG.md",
"chars": 3031,
"preview": "# ChangeLog\n\n### 1.4 - 2016-07-25\n\n* [#60][60] Support dynamic autocompletion\n* Fix ANSI parser on Windows\n* Fix wrong c"
},
{
"path": "vendor/github.com/chzyer/readline/LICENSE",
"chars": 1074,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Chzyer\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "vendor/github.com/chzyer/readline/README.md",
"chars": 12214,
"preview": "[](https://travis-ci.org/chzyer/readline)\n[![Sof"
},
{
"path": "vendor/github.com/chzyer/readline/ansi_windows.go",
"chars": 5174,
"preview": "// +build windows\n\npackage readline\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"unicode/utf8\"\n\t\"unsafe\"\n)\n\n"
},
{
"path": "vendor/github.com/chzyer/readline/complete.go",
"chars": 6224,
"preview": "package readline\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n)\n\ntype AutoCompleter interface {\n\t// Readline will pass the w"
},
{
"path": "vendor/github.com/chzyer/readline/complete_helper.go",
"chars": 3958,
"preview": "package readline\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n)\n\n// Caller type for dynamic completion\ntype DynamicCompleteFunc func(st"
},
{
"path": "vendor/github.com/chzyer/readline/complete_segment.go",
"chars": 1792,
"preview": "package readline\n\ntype SegmentCompleter interface {\n\t// a\n\t// |- a1\n\t// |--- a11\n\t// |- a2\n\t// b\n\t// input:\n\t// DoTree"
},
{
"path": "vendor/github.com/chzyer/readline/history.go",
"chars": 6143,
"preview": "package readline\n\nimport (\n\t\"bufio\"\n\t\"container/list\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n)\n\ntype hisItem struct {\n\tSource "
},
{
"path": "vendor/github.com/chzyer/readline/operation.go",
"chars": 10704,
"preview": "package readline\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"sync\"\n)\n\nvar (\n\tErrInterrupt = errors.New(\"Interrupt\")\n)\n\ntype InterruptErr"
},
{
"path": "vendor/github.com/chzyer/readline/password.go",
"chars": 630,
"preview": "package readline\n\ntype opPassword struct {\n\to *Operation\n\tbackupCfg *Config\n}\n\nfunc newOpPassword(o *Operation) "
},
{
"path": "vendor/github.com/chzyer/readline/rawreader_windows.go",
"chars": 2320,
"preview": "// +build windows\n\npackage readline\n\nimport \"unsafe\"\n\nconst (\n\tVK_CANCEL = 0x03\n\tVK_BACK = 0x08\n\tVK_TAB = 0x0"
},
{
"path": "vendor/github.com/chzyer/readline/readline.go",
"chars": 7037,
"preview": "// Readline is a pure go implementation for GNU-Readline kind library.\n//\n// example:\n// \trl, err := readline.New(\"> \")\n"
},
{
"path": "vendor/github.com/chzyer/readline/remote.go",
"chars": 8557,
"preview": "package readline\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\ntype"
},
{
"path": "vendor/github.com/chzyer/readline/runebuf.go",
"chars": 10804,
"preview": "package readline\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\ntype runeBufferBck struct {\n\tbuf []r"
},
{
"path": "vendor/github.com/chzyer/readline/runes.go",
"chars": 3839,
"preview": "package readline\n\nimport (\n\t\"bytes\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\nvar runes = Runes{}\nvar TabWidth = 4\n\ntype Runes struc"
},
{
"path": "vendor/github.com/chzyer/readline/search.go",
"chars": 3161,
"preview": "package readline\n\nimport (\n\t\"bytes\"\n\t\"container/list\"\n\t\"fmt\"\n\t\"io\"\n)\n\nconst (\n\tS_STATE_FOUND = iota\n\tS_STATE_FAILING\n)\n\n"
},
{
"path": "vendor/github.com/chzyer/readline/std.go",
"chars": 3663,
"preview": "package readline\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\nvar (\n\tStdin io.ReadCloser = os.Stdin\n\tStdout io.Writ"
},
{
"path": "vendor/github.com/chzyer/readline/std_windows.go",
"chars": 141,
"preview": "// +build windows\n\npackage readline\n\nfunc init() {\n\tStdin = NewRawReader()\n\tStdout = NewANSIWriter(Stdout)\n\tStderr = New"
},
{
"path": "vendor/github.com/chzyer/readline/term.go",
"chars": 3120,
"preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "vendor/github.com/chzyer/readline/term_bsd.go",
"chars": 734,
"preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "vendor/github.com/chzyer/readline/term_linux.go",
"chars": 964,
"preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "vendor/github.com/chzyer/readline/term_solaris.go",
"chars": 786,
"preview": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "vendor/github.com/chzyer/readline/term_unix.go",
"chars": 663,
"preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "vendor/github.com/chzyer/readline/term_windows.go",
"chars": 4406,
"preview": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license "
},
{
"path": "vendor/github.com/chzyer/readline/terminal.go",
"chars": 4122,
"preview": "package readline\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\ntype Terminal struct {\n\tm "
},
{
"path": "vendor/github.com/chzyer/readline/utils.go",
"chars": 4676,
"preview": "package readline\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"container/list\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\t\"unic"
},
{
"path": "vendor/github.com/chzyer/readline/utils_unix.go",
"chars": 1532,
"preview": "// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd solaris\n\npackage readline\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"os/"
},
{
"path": "vendor/github.com/chzyer/readline/utils_windows.go",
"chars": 554,
"preview": "// +build windows\n\npackage readline\n\nimport (\n\t\"io\"\n\t\"syscall\"\n)\n\nfunc SuspendMe() {\n}\n\nfunc GetStdin() int {\n\treturn in"
},
{
"path": "vendor/github.com/chzyer/readline/vim.go",
"chars": 2837,
"preview": "package readline\n\nconst (\n\tVIM_NORMAL = iota\n\tVIM_INSERT\n\tVIM_VISUAL\n)\n\ntype opVim struct {\n\tcfg *Config\n\top *O"
},
{
"path": "vendor/github.com/chzyer/readline/windows_api.go",
"chars": 3052,
"preview": "// +build windows\n\npackage readline\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tkernel = NewKernel()\n\tstdout = u"
},
{
"path": "vendor/github.com/fatih/color/LICENSE.md",
"chars": 1079,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2013 Fatih Arslan\n\nPermission is hereby granted, free of charge, to any person obta"
},
{
"path": "vendor/github.com/fatih/color/README.md",
"chars": 5081,
"preview": "# color [](https://github.com/fatih/color/actions) [](http://godoc.org/github.com/i"
},
{
"path": "vendor/github.com/iancoleman/strcase/acronyms.go",
"chars": 236,
"preview": "package strcase\n\nvar uppercaseAcronym = map[string]string{\n\t\"ID\": \"id\",\n}\n\n// ConfigureAcronym allows you to add additio"
},
{
"path": "vendor/github.com/iancoleman/strcase/camel.go",
"chars": 2201,
"preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 Ian Coleman\n * Copyright (c) 2018 Ma_124, <github.com/Ma124>\n *\n * "
},
{
"path": "vendor/github.com/iancoleman/strcase/doc.go",
"chars": 722,
"preview": "// Package strcase converts strings to various cases. See the conversion table below:\n// | Function "
},
{
"path": "vendor/github.com/iancoleman/strcase/snake.go",
"chars": 3787,
"preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 Ian Coleman\n * Copyright (c) 2018 Ma_124, <github.com/Ma124>\n *\n * "
},
{
"path": "vendor/github.com/inconshreveable/mousetrap/LICENSE",
"chars": 551,
"preview": "Copyright 2014 Alan Shreve\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file ex"
},
{
"path": "vendor/github.com/inconshreveable/mousetrap/README.md",
"chars": 848,
"preview": "# mousetrap\n\nmousetrap is a tiny library that answers a single question.\n\nOn a Windows machine, was the process invoked "
},
{
"path": "vendor/github.com/inconshreveable/mousetrap/trap_others.go",
"chars": 483,
"preview": "// +build !windows\n\npackage mousetrap\n\n// StartedByExplorer returns true if the program was invoked by the user\n// doubl"
}
]
// ... and 412 more files (download for full content)
About this extraction
This page contains the full source code of the hanagantig/goro GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 612 files (8.1 MB), approximately 2.2M tokens, and a symbol index with 71465 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.