Skip to content

Commit 915d32c

Browse files
committed
doc: add project info and contributing guidelines
1 parent 3c4ca84 commit 915d32c

File tree

9 files changed

+234
-12
lines changed

9 files changed

+234
-12
lines changed

.gitignore

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ Carthage/Checkouts
7676
Carthage/Build/
7777

7878
# Add Xcode project related files required by Carthage
79-
DynamicCodableKit.xcodeproj/*
80-
!DynamicCodableKit.xcodeproj/*.pbxproj
81-
!DynamicCodableKit.xcodeproj/*.plist
82-
!DynamicCodableKit.xcodeproj/xcshareddata
79+
MetaCodable.xcodeproj/*
80+
!MetaCodable.xcodeproj/*.pbxproj
81+
!MetaCodable.xcodeproj/*.plist
82+
!MetaCodable.xcodeproj/xcshareddata
8383

8484
# Accio dependency management
8585
Dependencies/

.spi.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
version: 1
2+
builder:
3+
configs:
4+
- documentation_targets: [CodableMacroPlugin, MetaCodable]

CHANGELOG.md

Whitespace-only changes.

CODE_OF_CONDUCT.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
In the interest of fostering an open and welcoming environment, we as
6+
contributors and maintainers pledge to making participation in our project and
7+
our community a harassment-free experience for everyone, regardless of age, body
8+
size, disability, ethnicity, sex characteristics, gender identity and expression,
9+
level of experience, education, socio-economic status, nationality, personal
10+
appearance, race, religion, or sexual identity and orientation.
11+
12+
## Our Standards
13+
14+
Examples of behavior that contributes to creating a positive environment
15+
include:
16+
17+
- Using welcoming and inclusive language
18+
- Being respectful of differing viewpoints and experiences
19+
- Gracefully accepting constructive criticism
20+
- Focusing on what is best for the community
21+
- Showing empathy towards other community members
22+
23+
Examples of unacceptable behavior by participants include:
24+
25+
- The use of sexualized language or imagery and unwelcome sexual attention or
26+
advances
27+
- Trolling, insulting/derogatory comments, and personal or political attacks
28+
- Public or private harassment
29+
- Publishing others' private information, such as a physical or electronic
30+
address, without explicit permission
31+
- Other conduct which could reasonably be considered inappropriate in a
32+
professional setting
33+
34+
## Our Responsibilities
35+
36+
Project maintainers are responsible for clarifying the standards of acceptable
37+
behavior and are expected to take appropriate and fair corrective action in
38+
response to any instances of unacceptable behavior.
39+
40+
Project maintainers have the right and responsibility to remove, edit, or
41+
reject comments, commits, code, wiki edits, issues, and other contributions
42+
that are not aligned to this Code of Conduct, or to ban temporarily or
43+
permanently any contributor for other behaviors that they deem inappropriate,
44+
threatening, offensive, or harmful.
45+
46+
## Scope
47+
48+
This Code of Conduct applies both within project spaces and in public spaces
49+
when an individual is representing the project or its community. Examples of
50+
representing a project or community include using an official project e-mail
51+
address, posting via an official social media account, or acting as an appointed
52+
representative at an online or offline event. Representation of a project may be
53+
further defined and clarified by project maintainers.
54+
55+
## Enforcement
56+
57+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
58+
reported by contacting the project team at [email protected]. All
59+
complaints will be reviewed and investigated and will result in a response that
60+
is deemed necessary and appropriate to the circumstances. The project team is
61+
obligated to maintain confidentiality with regard to the reporter of an incident.
62+
Further details of specific enforcement policies may be posted separately.
63+
64+
Project maintainers who do not follow or enforce the Code of Conduct in good
65+
faith may face temporary or permanent repercussions as determined by other
66+
members of the project's leadership.
67+
68+
## Attribution
69+
70+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71+
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72+
73+
[homepage]: https://www.contributor-covenant.org
74+
75+
For answers to common questions about this code of conduct, see
76+
https://www.contributor-covenant.org/faq

CONTRIBUTING.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Contributing Guidelines
2+
3+
This document contains information and guidelines about contributing to this project.
4+
Please read it before you start participating.
5+
6+
_See also: [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md)_
7+
8+
## Submitting Pull Requests
9+
10+
You can contribute by fixing bugs or adding new features. For larger code changes, we first recommend discussing them in our [Github issues](https://github.com/SwiftyLab/MetaCodable/issues). When submitting a pull request, please add relevant tests and ensure your changes don't break any existing tests (see [Automated Tests](#automated-tests) below).
11+
12+
### Things you will need
13+
14+
* Linux, Mac OS (preferred), or Windows.
15+
* Git
16+
* [Swift](https://www.swift.org/getting-started/#installing-swift)
17+
* Optional
18+
* Xcode and [CocoaPods], to test [CocoaPods] integration
19+
* [Node], to use helper scripts in [package.json](package.json) folder.
20+
21+
### Automated Tests
22+
23+
GitHub action is already setup to run tests on pull requests targeting `main` branch. However, to reduce heavy usage of GitHub runners, run the following commands in your terminal to test:
24+
25+
| Test category | With [Node] | Manually |
26+
| --- | --- | --- |
27+
| SPM integration | Run `npm run test` | Run `swift test` |
28+
| [CocoaPods] integration (Requires Xcode) | Run `npm run pod-lint` | Run `pod lib lint --no-clean --allow-warnings` |
29+
30+
## Developer's Certificate of Origin 1.1
31+
32+
By making a contribution to this project, I certify that:
33+
34+
<ol type='a'>
35+
<li id='cert-a'>
36+
The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
37+
</li>
38+
<li id='cert-b'>
39+
The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
40+
</li>
41+
<li id='cert-c'>
42+
The contribution was provided directly to me by some other person who certified <a href="#cert-a">(a)</a>, <a href="#cert-b">(b)</a> or <a href="#cert-c">(c)</a> and I have not modified it.
43+
</li>
44+
<li id='cert-d'>
45+
I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
46+
</li>
47+
</ol>
48+
49+
[CocoaPods]: https://cocoapods.org/
50+
[Node]: https://nodejs.org/

Package.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ import CompilerPluginSupport
55

66
let macroDeps: [Target.Dependency] = [
77
.product(name: "SwiftSyntax", package: "swift-syntax"),
8+
.product(name: "SwiftDiagnostics", package: "swift-syntax"),
9+
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
810
.product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
9-
.product(name: "SwiftOperators", package: "swift-syntax"),
10-
.product(name: "SwiftParser", package: "swift-syntax"),
11-
.product(name: "SwiftParserDiagnostics", package: "swift-syntax"),
1211
.product(name: "SwiftCompilerPlugin", package: "swift-syntax"),
1312
.product(name: "OrderedCollections", package: "swift-collections"),
1413
]
@@ -21,10 +20,10 @@ let testDeps: [Target.Dependency] = [
2120
let package = Package(
2221
name: "MetaCodable",
2322
platforms: [
24-
.iOS(.v8),
23+
.iOS(.v13),
2524
.macOS(.v10_15),
26-
.tvOS(.v9),
27-
.watchOS(.v2),
25+
.tvOS(.v13),
26+
.watchOS(.v6),
2827
.macCatalyst(.v13),
2928
],
3029
products: [

README.md

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,67 @@
11
# MetaCodable
2-
Supercharge Swift's Codable implementations with macros meta-programming.
2+
3+
[![API Docs](http://img.shields.io/badge/Read_the-docs-2196f3.svg)](https://swiftylab.github.io/MetaCodable/documentation/metacodable/)
4+
[![Swift Package Manager Compatible](https://img.shields.io/github/v/tag/SwiftyLab/MetaCodable?label=SPM&color=orange)](https://badge.fury.io/gh/SwiftyLab%2FMetaCodable)
5+
[![Swift](https://img.shields.io/badge/Swift-5.9+-orange)](https://img.shields.io/badge/Swift-5-DE5D43)
6+
[![Platforms](https://img.shields.io/badge/Platforms-all-sucess)](https://img.shields.io/badge/Platforms-all-sucess)
7+
[![CI/CD](https://github.com/SwiftyLab/MetaCodable/actions/workflows/main.yml/badge.svg?event=push)](https://github.com/SwiftyLab/MetaCodable/actions/workflows/main.yml)
8+
[![CodeFactor](https://www.codefactor.io/repository/github/swiftylab/metacodable/badge)](https://www.codefactor.io/repository/github/swiftylab/metacodable)
9+
[![codecov](https://codecov.io/gh/SwiftyLab/MetaCodable/branch/main/graph/badge.svg?token=jKxMv5oFeA)](https://codecov.io/gh/SwiftyLab/MetaCodable)
10+
<!-- [![CodeQL](https://github.com/SwiftyLab/MetaCodable/actions/workflows/codeql-analysis.yml/badge.svg?event=schedule)](https://github.com/SwiftyLab/MetaCodable/actions/workflows/codeql-analysis.yml) -->
11+
12+
Supercharge `Swift`'s `Codable` implementations with macros.
13+
14+
## Overview
15+
16+
`MetaCodable` framework exposes custom macros which can be used to generate dynamic `Codable` implementations. The core of the framework is ``Codable()`` macro which generates the implementation aided by data provided with using other macros.
17+
18+
19+
`MetaCodable` aims to supercharge your `Codable` implementations by providing these inbox features:
20+
21+
- Allows custom `CodingKey` value declaration per variable, instead of requiring you to write all the `CodingKey` values with ``CodablePath(_:)`` etc.
22+
- Allows to create flattened model for nested `CodingKey` values with ``CodablePath(_:)`` etc.
23+
- Allows to create composition of multiple `Codable` types with ``CodableCompose()`` etc.
24+
- Allows to provide default value in case of decoding failures with ``CodablePath(default:_:)`` and ``CodableCompose(default:)`` etc.
25+
- Generates member-wise initializer considering the above default value syntax as well.
26+
- Allows to create custom decoding/encoding strategies with ``ExternalHelperCoder``. i.e. ``LossySequenceCoder`` etc.
27+
28+
## Requirements
29+
30+
| Platform | Minimum Swift Version | Installation | Status |
31+
| --- | --- | --- | --- |
32+
| iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+ | 5.9 | Swift Package Manager | Fully Tested |
33+
| Linux | 5.9 | Swift Package Manager | Fully Tested |
34+
| Windows | 5.9 | Swift Package Manager | Fully Tested |
35+
36+
## Installation
37+
38+
### Swift Package Manager
39+
40+
The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler.
41+
42+
Once you have your Swift package set up, adding `MetaCodable` as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
43+
44+
```swift
45+
.package(url: "https://github.com/SwiftyLab/MetaCodable.git", from: "1.0.0"),
46+
```
47+
48+
Then you can add the `MetaCodable` module product as dependency to the `target`s of your choosing, by adding it to the `dependencies` value of your `target`s.
49+
50+
```swift
51+
.product(name: "MetaCodable", package: "MetaCodable"),
52+
```
53+
54+
## Usage
55+
56+
See the full [documentation](https://swiftylab.github.io/MetaCodable/documentation/metacodable/) for API details and articles on sample scenarios.
57+
58+
## Contributing
59+
60+
If you wish to contribute a change, suggest any improvements,
61+
please review our [contribution guide](CONTRIBUTING.md),
62+
check for open [issues](https://github.com/SwiftyLab/MetaCodable/issues), if it is already being worked upon
63+
or open a [pull request](https://github.com/SwiftyLab/MetaCodable/pulls).
64+
65+
## License
66+
67+
`MetaCodable` is released under the MIT license. [See LICENSE](LICENSE) for details.

Sources/MetaCodable/MetaCodable.docc/MetaCodable.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Supercharge `Swift`'s `Codable` implementations with macros.
2020

2121
| Platform | Minimum Swift Version | Installation | Status |
2222
| --- | --- | --- | --- |
23-
| iOS 8.0+ / macOS 10.15+ / tvOS 9.0+ / watchOS 2.0+ | 5.9 | CocoaPods, Carthage, Swift Package Manager, Manual | Fully Tested |
23+
| iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+ | 5.9 | Swift Package Manager | Fully Tested |
2424
| Linux | 5.9 | Swift Package Manager | Fully Tested |
2525
| Windows | 5.9 | Swift Package Manager | Fully Tested |
2626

package.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "MetaCodable",
3+
"version": "1.0.0-alpha.1",
4+
"summary": "Supercharge Swift's Codable implementations with macros.",
5+
"description": "MetaCodable exposes custom macros which can be used to generate dynamic Codable implementations.",
6+
"homepage": "https://github.com/SwiftyLab/MetaCodable",
7+
"license": "MIT",
8+
"author": {
9+
"name": "Soumya Ranjan Mahunt",
10+
"email": "[email protected]",
11+
"url": "https://twitter.com/soumya_mahunt"
12+
},
13+
"repository": {
14+
"type": "git",
15+
"url": "https://github.com/SwiftyLab/MetaCodable.git"
16+
},
17+
"private": true,
18+
"dependencies": {
19+
"swiftylab-ci": "github:SwiftyLab/ci"
20+
},
21+
"scripts": {
22+
"build": "npm exec --package=swiftylab-ci -- build.js",
23+
"test": "npm exec --package=swiftylab-ci -- test.js",
24+
"preview-doc": "npm exec --package=swiftylab-ci -- preview-doc.js MetaCodable",
25+
"build-doc": "npm exec --package=swiftylab-ci -- build-doc.js MetaCodable",
26+
"serve-doc": "npm exec --package=swiftylab-ci -- serve-doc.js MetaCodable"
27+
}
28+
}

0 commit comments

Comments
 (0)