Compare commits

...

37 Commits

Author SHA1 Message Date
semantic-release-bot
8c8394e546 release(stable): v1.2.0
## [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](057f12e602))
* **types:** add `Pairs` type ([658d8a7](658d8a7fd6))

### Refactoring

* **comments:** beautify comments ([73328b0](73328b0ef7))

### Continuous Integrations

* **deps:** pin `conventional-changelog-conventionalcommits` to version 7.x ([e6fc7d8](e6fc7d8d65))
* **init:** add initial CI configuration ([edf64a3](edf64a344f))
* **renovate:** add Renovate bot configuration ([f7324b3](f7324b38a1))
* **test:** remove `group` directive ([57713b3](57713b397f))

### Build system and dependencies

* **deps:** update all non-major dependencies ([8bd6307](8bd63075f4))
* **deps:** update all non-major dependencies ([c728417](c728417957))
* **deps:** update all non-major dependencies ([6288e9d](6288e9d155))
* **deps:** update dependency @semantic-release/commit-analyzer to v12 ([0be7796](0be77969d9))
* **deps:** update dependency @semantic-release/npm to v12 ([abb8e20](abb8e20ebf))
* **deps:** update dependency @semantic-release/release-notes-generator to v13 ([280006b](280006b47b))
* **deps:** update dependency conventional-changelog-conventionalcommits to v8 ([c473983](c473983287))
* **deps:** update dependency semantic-release to v23 ([27e0bd1](27e0bd1c5b))
* **deps:** update dependency semantic-release to v23.0.3 ([38d67b0](38d67b0580))
* **deps:** update dependency semantic-release to v23.0.4 ([c0db031](c0db0317fa))
* **deps:** update dependency semantic-release to v23.0.5 ([f30de19](f30de192cd))
* **deps:** update dependency semantic-release to v23.0.8 ([c139591](c139591557))
2024-05-27 22:35:44 +00:00
semantic-release-bot
03df6819f8 release(rc): v1.2.0-rc.3
## [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](57713b397f))
2024-05-27 22:28:27 +00:00
57713b397f
ci(test): remove group directive 2024-05-28 00:27:46 +02:00
semantic-release-bot
dd110b65b6 release(rc): v1.2.0-rc.2
## [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](057f12e602))

### Refactoring

* **comments:** beautify comments ([73328b0](73328b0ef7))
2024-05-27 22:26:30 +00:00
97bf50af45
docs(package): add simple README.md and package description 2024-05-28 00:21:14 +02:00
73328b0ef7
refactor(comments): beautify comments 2024-05-28 00:20:32 +02:00
057f12e602
feat(pairs): add Pairs-related methods 2024-05-28 00:19:20 +02:00
semantic-release-bot
da6f44a8ed release(rc): v1.2.0-rc.1
## [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](658d8a7fd6))

### Continuous Integrations

* **deps:** pin `conventional-changelog-conventionalcommits` to version 7.x ([e6fc7d8](e6fc7d8d65))

### Build system and dependencies

* **deps:** update all non-major dependencies ([8bd6307](8bd63075f4))
* **deps:** update dependency conventional-changelog-conventionalcommits to v8 ([c473983](c473983287))
2024-05-21 20:58:14 +00:00
e6fc7d8d65
ci(deps): pin conventional-changelog-conventionalcommits to version 7.x 2024-05-21 22:57:18 +02:00
658d8a7fd6
feat(types): add Pairs type 2024-05-21 22:39:52 +02:00
8bd63075f4 build(deps): update all non-major dependencies 2024-05-15 13:15:23 +02:00
c473983287 build(deps): update dependency conventional-changelog-conventionalcommits to v8 2024-05-04 00:02:05 +00:00
semantic-release-bot
5505c12bc7 release(rc): v1.1.1-rc.9
## [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](280006b47b))
2024-04-12 12:42:13 +00:00
280006b47b build(deps): update dependency @semantic-release/release-notes-generator to v13 2024-04-12 12:41:17 +00:00
semantic-release-bot
a095469e25 release(rc): v1.1.1-rc.8
## [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](c139591557))
2024-04-12 12:39:56 +00:00
c139591557 build(deps): update dependency semantic-release to v23.0.8 2024-04-10 00:02:07 +00:00
semantic-release-bot
7d702d6178 release(rc): v1.1.1-rc.7
## [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](f30de192cd))
2024-03-23 23:22:16 +00:00
f30de192cd build(deps): update dependency semantic-release to v23.0.5 2024-03-23 23:20:18 +00:00
semantic-release-bot
8d9b7894ca release(rc): v1.1.1-rc.6
## [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](0be77969d9))
2024-03-23 23:18:53 +00:00
0be77969d9 build(deps): update dependency @semantic-release/commit-analyzer to v12 2024-03-19 00:02:21 +00:00
semantic-release-bot
92297d61a3 release(rc): v1.1.1-rc.5
## [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](abb8e20ebf))
2024-03-17 11:37:15 +00:00
abb8e20ebf build(deps): update dependency @semantic-release/npm to v12 2024-03-17 11:34:18 +00:00
semantic-release-bot
82867b4f4f release(rc): v1.1.1-rc.4
## [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](c0db0317fa))
2024-03-17 11:32:17 +00:00
c0db0317fa build(deps): update dependency semantic-release to v23.0.4 2024-03-17 00:02:13 +00:00
semantic-release-bot
242a291606 release(rc): v1.1.1-rc.3
## [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](38d67b0580))
2024-03-16 00:07:29 +00:00
38d67b0580 build(deps): update dependency semantic-release to v23.0.3 2024-03-16 00:03:21 +00:00
semantic-release-bot
374832d2fb release(rc): v1.1.1-rc.2
## [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](f7324b38a1))

### Build system and dependencies

* **deps:** update all non-major dependencies ([c728417](c728417957))
* **deps:** update all non-major dependencies ([6288e9d](6288e9d155))
* **deps:** update dependency semantic-release to v23 ([27e0bd1](27e0bd1c5b))
2024-03-02 15:17:49 +00:00
1299fc510b Merge pull request 'build(deps): update all non-major dependencies' (#5) from renovate-all-minor-patch into devel
Reviewed-on: #5
2024-03-02 16:17:09 +01:00
c728417957 build(deps): update all non-major dependencies 2024-03-02 00:02:18 +00:00
c86ef1e98f Merge pull request 'build(deps): update all non-major dependencies' (#2) from renovate-all-minor-patch into devel
Reviewed-on: #2
2024-02-29 00:54:29 +01:00
6288e9d155 build(deps): update all non-major dependencies 2024-02-28 23:53:44 +00:00
0b7f805404 Merge pull request 'build(deps): update dependency semantic-release to v23' (#3) from renovate-major-all-major into devel
Reviewed-on: #3
2024-02-29 00:50:09 +01:00
27e0bd1c5b build(deps): update dependency semantic-release to v23 2024-02-28 23:46:11 +00:00
f7324b38a1
ci(renovate): add Renovate bot configuration 2024-02-29 00:20:02 +01:00
semantic-release-bot
5bd0839312 release(rc): v1.1.1-rc.1
## [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](edf64a344f))
2023-11-04 20:19:11 +00:00
27147be21e Merge pull request 'Add Woodpecker CI support' (#1) from ci into devel
Reviewed-on: #1
2023-11-04 21:17:46 +01:00
edf64a344f
ci(init): add initial CI configuration 2023-11-04 20:36:55 +01:00
17 changed files with 8736 additions and 21 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.vscode/*
node_modules/*

152
.releaserc.json Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View File

@ -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
View File

@ -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
View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
/* /*
Generics-related functions Collection of helpers and functions using generics.
*/ */
package generics package generics

18
package.json Normal file
View 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
View 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
View 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
View File

@ -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