Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8c8394e546 | ||
|
03df6819f8 | ||
57713b397f | |||
|
dd110b65b6 | ||
97bf50af45 | |||
73328b0ef7 | |||
057f12e602 | |||
|
da6f44a8ed | ||
e6fc7d8d65 | |||
658d8a7fd6 | |||
8bd63075f4 | |||
c473983287 | |||
|
5505c12bc7 | ||
280006b47b | |||
|
a095469e25 | ||
c139591557 | |||
|
7d702d6178 | ||
f30de192cd | |||
|
8d9b7894ca | ||
0be77969d9 | |||
|
92297d61a3 | ||
abb8e20ebf | |||
|
82867b4f4f | ||
c0db0317fa | |||
|
242a291606 | ||
38d67b0580 | |||
|
374832d2fb | ||
1299fc510b | |||
c728417957 | |||
c86ef1e98f | |||
6288e9d155 | |||
0b7f805404 | |||
27e0bd1c5b | |||
f7324b38a1 | |||
|
5bd0839312 | ||
27147be21e | |||
edf64a344f |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
.vscode/*
|
||||||
|
node_modules/*
|
152
.releaserc.json
Normal file
152
.releaserc.json
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
{
|
||||||
|
"branches": [
|
||||||
|
{
|
||||||
|
"name": "main",
|
||||||
|
"channel": "stable",
|
||||||
|
"prerelease": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "devel",
|
||||||
|
"channel": "rc",
|
||||||
|
"prerelease": "rc"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"@semantic-release/commit-analyzer", {
|
||||||
|
"preset": "conventionalcommits",
|
||||||
|
"releaseRules": [
|
||||||
|
{
|
||||||
|
"type": "feat",
|
||||||
|
"release": "minor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "fix",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "docs",
|
||||||
|
"release": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "style",
|
||||||
|
"release": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "refactor",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "perf",
|
||||||
|
"release": "minor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "test",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "build",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ci",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "revert",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "release",
|
||||||
|
"release": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parserOpts": {
|
||||||
|
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/release-notes-generator", {
|
||||||
|
"preset": "conventionalcommits",
|
||||||
|
"presetConfig": {
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "feat",
|
||||||
|
"section": "Features",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "fix",
|
||||||
|
"section": "Bug Fixes",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "docs",
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "refactor",
|
||||||
|
"section": "Refactoring",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "perf",
|
||||||
|
"section": "Performance Improvements",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "test",
|
||||||
|
"section": " Tests",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ci",
|
||||||
|
"section": "Continuous Integrations",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "chore",
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "revert",
|
||||||
|
"section": "Reverts",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "release",
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "build",
|
||||||
|
"section": "Build system and dependencies",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/changelog", {
|
||||||
|
"changelogFile": "CHANGELOG.md"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/npm", {
|
||||||
|
"npmPublish": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
["@saithodev/semantic-release-gitea", {
|
||||||
|
"giteaUrl": "https://git.ext.icikowski.pl"
|
||||||
|
}],
|
||||||
|
[
|
||||||
|
"@semantic-release/git", {
|
||||||
|
"assets": ["CHANGELOG.md","package.json", "package-lock.json"],
|
||||||
|
"message": "release(${nextRelease.channel}): v${nextRelease.version}\n\n${nextRelease.notes}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"preset": "conventionalcommits"
|
||||||
|
}
|
||||||
|
|
38
.renovaterc.json
Normal file
38
.renovaterc.json
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"local>renovate/renovate"
|
||||||
|
],
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"groupName": "all non-major dependencies",
|
||||||
|
"groupSlug": "all-minor-patch",
|
||||||
|
"matchPackagePatterns": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"matchUpdateTypes": [
|
||||||
|
"minor",
|
||||||
|
"patch",
|
||||||
|
"pin",
|
||||||
|
"digest"
|
||||||
|
],
|
||||||
|
"automerge": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupName": "all major dependencies",
|
||||||
|
"groupSlug": "all-major",
|
||||||
|
"matchPackagePatterns": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"matchUpdateTypes": [
|
||||||
|
"major"
|
||||||
|
],
|
||||||
|
"automerge": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ignoreDeps": [],
|
||||||
|
"postUpdateOptions": [
|
||||||
|
"gomodTidy",
|
||||||
|
"gomodUpdateImportPaths"
|
||||||
|
]
|
||||||
|
}
|
13
.woodpecker/.release.yml
Normal file
13
.woodpecker/.release.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
when:
|
||||||
|
- event: push
|
||||||
|
evaluate: '(CI_COMMIT_BRANCH == "devel" && not (CI_COMMIT_MESSAGE startsWith "release")) || (CI_COMMIT_BRANCH == "main" && not (CI_COMMIT_MESSAGE startsWith "release(stable)"))'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
semantic-release:
|
||||||
|
image: node:latest
|
||||||
|
secrets:
|
||||||
|
- gitea_token
|
||||||
|
- git_credentials
|
||||||
|
commands:
|
||||||
|
- npm i
|
||||||
|
- npm run release
|
10
.woodpecker/.test.yml
Normal file
10
.woodpecker/.test.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
when:
|
||||||
|
- event: [push, pull_request]
|
||||||
|
branch: devel
|
||||||
|
evaluate: 'not (CI_COMMIT_MESSAGE startsWith "release")'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
test:
|
||||||
|
image: golang:1.22-alpine
|
||||||
|
commands:
|
||||||
|
- go test -v ./...
|
143
CHANGELOG.md
Normal file
143
CHANGELOG.md
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
## [1.2.0](https://git.ext.icikowski.pl/go/generics/compare/v1.1.0...v1.2.0) (2024-05-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **pairs:** add `Pairs`-related methods ([057f12e](https://git.ext.icikowski.pl/go/generics/commit/057f12e602cda3282bd3aa53590a4bd120789f3e))
|
||||||
|
* **types:** add `Pairs` type ([658d8a7](https://git.ext.icikowski.pl/go/generics/commit/658d8a7fd6a032c65531b2a708da5c87417a7caf))
|
||||||
|
|
||||||
|
|
||||||
|
### Refactoring
|
||||||
|
|
||||||
|
* **comments:** beautify comments ([73328b0](https://git.ext.icikowski.pl/go/generics/commit/73328b0ef77efe3bc873b643e1464a84faf64e54))
|
||||||
|
|
||||||
|
|
||||||
|
### Continuous Integrations
|
||||||
|
|
||||||
|
* **deps:** pin `conventional-changelog-conventionalcommits` to version 7.x ([e6fc7d8](https://git.ext.icikowski.pl/go/generics/commit/e6fc7d8d6564a8ccaad0b11e307bae400d3ebe61))
|
||||||
|
* **init:** add initial CI configuration ([edf64a3](https://git.ext.icikowski.pl/go/generics/commit/edf64a344f8102d53b647f3f345ca9cbaed75bd2))
|
||||||
|
* **renovate:** add Renovate bot configuration ([f7324b3](https://git.ext.icikowski.pl/go/generics/commit/f7324b38a1b575949e8d8bf847738ea96c5ee1f3))
|
||||||
|
* **test:** remove `group` directive ([57713b3](https://git.ext.icikowski.pl/go/generics/commit/57713b397fd81cf8856bb573211835df8edad1a1))
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([8bd6307](https://git.ext.icikowski.pl/go/generics/commit/8bd63075f40e8126c42274985ec8fff33eda1751))
|
||||||
|
* **deps:** update all non-major dependencies ([c728417](https://git.ext.icikowski.pl/go/generics/commit/c72841795782290d8a8252058de7210c93410d1a))
|
||||||
|
* **deps:** update all non-major dependencies ([6288e9d](https://git.ext.icikowski.pl/go/generics/commit/6288e9d155df422e1507714569de4bd519cb49b8))
|
||||||
|
* **deps:** update dependency @semantic-release/commit-analyzer to v12 ([0be7796](https://git.ext.icikowski.pl/go/generics/commit/0be77969d9a2df9643847d1e98059f1be4b283a4))
|
||||||
|
* **deps:** update dependency @semantic-release/npm to v12 ([abb8e20](https://git.ext.icikowski.pl/go/generics/commit/abb8e20ebfc063448616ae35a793a6afab121bba))
|
||||||
|
* **deps:** update dependency @semantic-release/release-notes-generator to v13 ([280006b](https://git.ext.icikowski.pl/go/generics/commit/280006b47ba3c7a89cb4b7ef26fb9f0c0b735326))
|
||||||
|
* **deps:** update dependency conventional-changelog-conventionalcommits to v8 ([c473983](https://git.ext.icikowski.pl/go/generics/commit/c4739832872f532adfdbaea724a756f6abcb86f7))
|
||||||
|
* **deps:** update dependency semantic-release to v23 ([27e0bd1](https://git.ext.icikowski.pl/go/generics/commit/27e0bd1c5bad1d5cf682717e64c23454b25081a9))
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.3 ([38d67b0](https://git.ext.icikowski.pl/go/generics/commit/38d67b0580902f0d6c3ea120ccfcc6dac2ec5b56))
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.4 ([c0db031](https://git.ext.icikowski.pl/go/generics/commit/c0db0317faedfce3bed1b590919f5a275397f277))
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.5 ([f30de19](https://git.ext.icikowski.pl/go/generics/commit/f30de192cda667443974081f0e8661ddf881eec2))
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.8 ([c139591](https://git.ext.icikowski.pl/go/generics/commit/c13959155745dfbe3b488afc26b9fe234e3a405d))
|
||||||
|
|
||||||
|
## [1.2.0-rc.3](https://git.ext.icikowski.pl/go/generics/compare/v1.2.0-rc.2...v1.2.0-rc.3) (2024-05-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Continuous Integrations
|
||||||
|
|
||||||
|
* **test:** remove `group` directive ([57713b3](https://git.ext.icikowski.pl/go/generics/commit/57713b397fd81cf8856bb573211835df8edad1a1))
|
||||||
|
|
||||||
|
## [1.2.0-rc.2](https://git.ext.icikowski.pl/go/generics/compare/v1.2.0-rc.1...v1.2.0-rc.2) (2024-05-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **pairs:** add `Pairs`-related methods ([057f12e](https://git.ext.icikowski.pl/go/generics/commit/057f12e602cda3282bd3aa53590a4bd120789f3e))
|
||||||
|
|
||||||
|
|
||||||
|
### Refactoring
|
||||||
|
|
||||||
|
* **comments:** beautify comments ([73328b0](https://git.ext.icikowski.pl/go/generics/commit/73328b0ef77efe3bc873b643e1464a84faf64e54))
|
||||||
|
|
||||||
|
## [1.2.0-rc.1](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.9...v1.2.0-rc.1) (2024-05-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **types:** add `Pairs` type ([658d8a7](https://git.ext.icikowski.pl/go/generics/commit/658d8a7fd6a032c65531b2a708da5c87417a7caf))
|
||||||
|
|
||||||
|
|
||||||
|
### Continuous Integrations
|
||||||
|
|
||||||
|
* **deps:** pin `conventional-changelog-conventionalcommits` to version 7.x ([e6fc7d8](https://git.ext.icikowski.pl/go/generics/commit/e6fc7d8d6564a8ccaad0b11e307bae400d3ebe61))
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([8bd6307](https://git.ext.icikowski.pl/go/generics/commit/8bd63075f40e8126c42274985ec8fff33eda1751))
|
||||||
|
* **deps:** update dependency conventional-changelog-conventionalcommits to v8 ([c473983](https://git.ext.icikowski.pl/go/generics/commit/c4739832872f532adfdbaea724a756f6abcb86f7))
|
||||||
|
|
||||||
|
## [1.1.1-rc.9](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.8...v1.1.1-rc.9) (2024-04-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update dependency @semantic-release/release-notes-generator to v13 ([280006b](https://git.ext.icikowski.pl/go/generics/commit/280006b47ba3c7a89cb4b7ef26fb9f0c0b735326))
|
||||||
|
|
||||||
|
## [1.1.1-rc.8](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.7...v1.1.1-rc.8) (2024-04-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.8 ([c139591](https://git.ext.icikowski.pl/go/generics/commit/c13959155745dfbe3b488afc26b9fe234e3a405d))
|
||||||
|
|
||||||
|
## [1.1.1-rc.7](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.6...v1.1.1-rc.7) (2024-03-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.5 ([f30de19](https://git.ext.icikowski.pl/go/generics/commit/f30de192cda667443974081f0e8661ddf881eec2))
|
||||||
|
|
||||||
|
## [1.1.1-rc.6](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.5...v1.1.1-rc.6) (2024-03-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update dependency @semantic-release/commit-analyzer to v12 ([0be7796](https://git.ext.icikowski.pl/go/generics/commit/0be77969d9a2df9643847d1e98059f1be4b283a4))
|
||||||
|
|
||||||
|
## [1.1.1-rc.5](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.4...v1.1.1-rc.5) (2024-03-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update dependency @semantic-release/npm to v12 ([abb8e20](https://git.ext.icikowski.pl/go/generics/commit/abb8e20ebfc063448616ae35a793a6afab121bba))
|
||||||
|
|
||||||
|
## [1.1.1-rc.4](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.3...v1.1.1-rc.4) (2024-03-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.4 ([c0db031](https://git.ext.icikowski.pl/go/generics/commit/c0db0317faedfce3bed1b590919f5a275397f277))
|
||||||
|
|
||||||
|
## [1.1.1-rc.3](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.2...v1.1.1-rc.3) (2024-03-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update dependency semantic-release to v23.0.3 ([38d67b0](https://git.ext.icikowski.pl/go/generics/commit/38d67b0580902f0d6c3ea120ccfcc6dac2ec5b56))
|
||||||
|
|
||||||
|
## [1.1.1-rc.2](https://git.ext.icikowski.pl/go/generics/compare/v1.1.1-rc.1...v1.1.1-rc.2) (2024-03-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Continuous Integrations
|
||||||
|
|
||||||
|
* **renovate:** add Renovate bot configuration ([f7324b3](https://git.ext.icikowski.pl/go/generics/commit/f7324b38a1b575949e8d8bf847738ea96c5ee1f3))
|
||||||
|
|
||||||
|
|
||||||
|
### Build system and dependencies
|
||||||
|
|
||||||
|
* **deps:** update all non-major dependencies ([c728417](https://git.ext.icikowski.pl/go/generics/commit/c72841795782290d8a8252058de7210c93410d1a))
|
||||||
|
* **deps:** update all non-major dependencies ([6288e9d](https://git.ext.icikowski.pl/go/generics/commit/6288e9d155df422e1507714569de4bd519cb49b8))
|
||||||
|
* **deps:** update dependency semantic-release to v23 ([27e0bd1](https://git.ext.icikowski.pl/go/generics/commit/27e0bd1c5bad1d5cf682717e64c23454b25081a9))
|
||||||
|
|
||||||
|
## [1.1.1-rc.1](https://git.ext.icikowski.pl/go/generics/compare/v1.1.0...v1.1.1-rc.1) (2023-11-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Continuous Integrations
|
||||||
|
|
||||||
|
* **init:** add initial CI configuration ([edf64a3](https://git.ext.icikowski.pl/go/generics/commit/edf64a344f8102d53b647f3f345ca9cbaed75bd2))
|
5
README.md
Normal file
5
README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# `generics`
|
||||||
|
|
||||||
|
[![Go Report Card](https://goreportcard.com/badge/pkg.icikowski.pl/generics)](https://goreportcard.com/report/pkg.icikowski.pl/generics)
|
||||||
|
|
||||||
|
Collection of helpers and functions using generics.
|
2
go.mod
2
go.mod
@ -2,7 +2,7 @@ module pkg.icikowski.pl/generics
|
|||||||
|
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
require github.com/stretchr/testify v1.8.4
|
require github.com/stretchr/testify v1.9.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
|
4
go.sum
4
go.sum
@ -2,8 +2,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
16
maps.go
16
maps.go
@ -1,13 +1,7 @@
|
|||||||
package generics
|
package generics
|
||||||
|
|
||||||
// Pair represents key-value pair
|
// MapPairs returns list of map's key-value pairs.
|
||||||
type Pair[K comparable, V any] struct {
|
func MapPairs[K comparable, V any](src map[K]V) Pairs[K, V] {
|
||||||
Key K
|
|
||||||
Value V
|
|
||||||
}
|
|
||||||
|
|
||||||
// MapPairs returns list of map's key-value pairs
|
|
||||||
func MapPairs[K comparable, V any](src map[K]V) []Pair[K, V] {
|
|
||||||
dst := make([]Pair[K, V], len(src))
|
dst := make([]Pair[K, V], len(src))
|
||||||
idx := 0
|
idx := 0
|
||||||
for k, v := range src {
|
for k, v := range src {
|
||||||
@ -20,7 +14,7 @@ func MapPairs[K comparable, V any](src map[K]V) []Pair[K, V] {
|
|||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// MapKeys returns list of map's keys
|
// MapKeys returns list of map's keys.
|
||||||
func MapKeys[K comparable, V any](src map[K]V) []K {
|
func MapKeys[K comparable, V any](src map[K]V) []K {
|
||||||
dst := make([]K, len(src))
|
dst := make([]K, len(src))
|
||||||
idx := 0
|
idx := 0
|
||||||
@ -31,7 +25,7 @@ func MapKeys[K comparable, V any](src map[K]V) []K {
|
|||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// MapValues returns list of map's values
|
// MapValues returns list of map's values.
|
||||||
func MapValues[K comparable, V any](src map[K]V) []V {
|
func MapValues[K comparable, V any](src map[K]V) []V {
|
||||||
dst := make([]V, len(src))
|
dst := make([]V, len(src))
|
||||||
idx := 0
|
idx := 0
|
||||||
@ -42,7 +36,7 @@ func MapValues[K comparable, V any](src map[K]V) []V {
|
|||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// InvertMap returns map with keys and values swapped
|
// InvertMap returns map with keys and values swapped.
|
||||||
func InvertMap[K, V comparable](src map[K]V) map[V]K {
|
func InvertMap[K, V comparable](src map[K]V) map[V]K {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
return nil
|
return nil
|
||||||
|
@ -13,11 +13,11 @@ func TestMapPairs(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
"nil map": {
|
"nil map": {
|
||||||
src: nil,
|
src: nil,
|
||||||
dst: []Pair[string, int]{},
|
dst: Pairs[string, int]{},
|
||||||
},
|
},
|
||||||
"empty map": {
|
"empty map": {
|
||||||
src: map[string]int{},
|
src: map[string]int{},
|
||||||
dst: []Pair[string, int]{},
|
dst: Pairs[string, int]{},
|
||||||
},
|
},
|
||||||
"filled map": {
|
"filled map": {
|
||||||
src: map[string]int{
|
src: map[string]int{
|
||||||
@ -25,7 +25,7 @@ func TestMapPairs(t *testing.T) {
|
|||||||
"bar": 2,
|
"bar": 2,
|
||||||
"baz": 3,
|
"baz": 3,
|
||||||
},
|
},
|
||||||
dst: []Pair[string, int]{
|
dst: Pairs[string, int]{
|
||||||
{
|
{
|
||||||
Key: "foo",
|
Key: "foo",
|
||||||
Value: 1,
|
Value: 1,
|
||||||
|
8219
package-lock.json
generated
Normal file
8219
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Generics-related functions
|
Collection of helpers and functions using generics.
|
||||||
*/
|
*/
|
||||||
package generics
|
package generics
|
||||||
|
18
package.json
Normal file
18
package.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"name": "generics",
|
||||||
|
"version": "1.2.0",
|
||||||
|
"scripts": {
|
||||||
|
"release": "./node_modules/.bin/semantic-release"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@saithodev/semantic-release-gitea": "^2.1.0",
|
||||||
|
"@semantic-release/changelog": "^6.0.3",
|
||||||
|
"@semantic-release/commit-analyzer": "^12.0.0",
|
||||||
|
"@semantic-release/git": "^10.0.1",
|
||||||
|
"@semantic-release/npm": "^12.0.0",
|
||||||
|
"@semantic-release/release-notes-generator": "^13.0.0",
|
||||||
|
"conventional-changelog-conventionalcommits": "^7.0.2",
|
||||||
|
"semantic-release": "^23.0.0"
|
||||||
|
}
|
||||||
|
}
|
28
pairs.go
Normal file
28
pairs.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package generics
|
||||||
|
|
||||||
|
// Pair represents key-value pair.
|
||||||
|
type Pair[K comparable, V any] struct {
|
||||||
|
Key K
|
||||||
|
Value V
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pairs represents a collection of key-value pairs.
|
||||||
|
type Pairs[K comparable, V any] []Pair[K, V]
|
||||||
|
|
||||||
|
// Keys returns list of key-value pairs' keys.
|
||||||
|
func (p Pairs[K, V]) Keys() []K {
|
||||||
|
dst := make([]K, len(p))
|
||||||
|
for i, pair := range p {
|
||||||
|
dst[i] = pair.Key
|
||||||
|
}
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
// Values returns list of key-value pairs' values.
|
||||||
|
func (p Pairs[K, V]) Values() []V {
|
||||||
|
dst := make([]V, len(p))
|
||||||
|
for i, pair := range p {
|
||||||
|
dst[i] = pair.Value
|
||||||
|
}
|
||||||
|
return dst
|
||||||
|
}
|
93
pairs_test.go
Normal file
93
pairs_test.go
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
package generics
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPairsKeys(t *testing.T) {
|
||||||
|
tests := map[string]struct {
|
||||||
|
src Pairs[string, int]
|
||||||
|
dst []string
|
||||||
|
}{
|
||||||
|
"nil pairs": {
|
||||||
|
src: nil,
|
||||||
|
dst: []string{},
|
||||||
|
},
|
||||||
|
"empty pairs": {
|
||||||
|
src: Pairs[string, int]{},
|
||||||
|
dst: []string{},
|
||||||
|
},
|
||||||
|
"filled pairs": {
|
||||||
|
src: Pairs[string, int]{
|
||||||
|
{
|
||||||
|
Key: "foo",
|
||||||
|
Value: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: "bar",
|
||||||
|
Value: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: "baz",
|
||||||
|
Value: 3,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dst: []string{
|
||||||
|
"foo",
|
||||||
|
"bar",
|
||||||
|
"baz",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, tc := range tests {
|
||||||
|
name, tc := name, tc
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
dst := tc.src.Keys()
|
||||||
|
require.ElementsMatch(t, tc.dst, dst)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPairsValues(t *testing.T) {
|
||||||
|
tests := map[string]struct {
|
||||||
|
src Pairs[string, int]
|
||||||
|
dst []int
|
||||||
|
}{
|
||||||
|
"nil pairs": {
|
||||||
|
src: nil,
|
||||||
|
dst: []int{},
|
||||||
|
},
|
||||||
|
"empty pairs": {
|
||||||
|
src: Pairs[string, int]{},
|
||||||
|
dst: []int{},
|
||||||
|
},
|
||||||
|
"filled pairs": {
|
||||||
|
src: Pairs[string, int]{
|
||||||
|
{
|
||||||
|
Key: "foo",
|
||||||
|
Value: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: "bar",
|
||||||
|
Value: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: "baz",
|
||||||
|
Value: 3,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dst: []int{1, 2, 3},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, tc := range tests {
|
||||||
|
name, tc := name, tc
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
dst := tc.src.Values()
|
||||||
|
require.ElementsMatch(t, tc.dst, dst)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
6
ptr.go
6
ptr.go
@ -1,11 +1,11 @@
|
|||||||
package generics
|
package generics
|
||||||
|
|
||||||
// Ptr returns pointer for given value
|
// Ptr returns pointer for given value.
|
||||||
func Ptr[T any](val T) *T {
|
func Ptr[T any](val T) *T {
|
||||||
return &val
|
return &val
|
||||||
}
|
}
|
||||||
|
|
||||||
// Val returns value of given pointer or default value if pointer is nil
|
// Val returns value of given pointer or default value if pointer is nil.
|
||||||
func Val[T any](ptr *T) T {
|
func Val[T any](ptr *T) T {
|
||||||
var val T
|
var val T
|
||||||
if ptr != nil {
|
if ptr != nil {
|
||||||
@ -14,7 +14,7 @@ func Val[T any](ptr *T) T {
|
|||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fallback returns value of given pointer or fallback value if pointer is nil
|
// Fallback returns value of given pointer or fallback value if pointer is nil.
|
||||||
func Fallback[T any](ptr *T, fallback T) T {
|
func Fallback[T any](ptr *T, fallback T) T {
|
||||||
if ptr != nil {
|
if ptr != nil {
|
||||||
return *ptr
|
return *ptr
|
||||||
|
Loading…
Reference in New Issue
Block a user