{"id":20923414,"url":"https://github.com/mako-framework/dataclass","last_synced_at":"2025-05-13T16:30:38.437Z","repository":{"id":143314438,"uuid":"610942469","full_name":"mako-framework/dataclass","owner":"mako-framework","description":"(Experimental) An easy to use data class implementation inspired by Pydantic.","archived":true,"fork":false,"pushed_at":"2024-07-07T14:38:05.000Z","size":37,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-13T00:42:44.533Z","etag":null,"topics":["mako-framework","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mako-framework.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-07T19:45:27.000Z","updated_at":"2024-08-20T19:27:35.000Z","dependencies_parsed_at":"2024-05-30T23:46:13.005Z","dependency_job_id":null,"html_url":"https://github.com/mako-framework/dataclass","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mako-framework%2Fdataclass","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mako-framework%2Fdataclass/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mako-framework%2Fdataclass/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mako-framework%2Fdataclass/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mako-framework","download_url":"https://codeload.github.com/mako-framework/dataclass/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253981652,"owners_count":21994312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mako-framework","php"],"created_at":"2024-11-18T20:15:39.393Z","updated_at":"2025-05-13T16:30:38.124Z","avatar_url":"https://github.com/mako-framework.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DataClass\n\n[![Tests](https://github.com/mako-framework/dataclass/actions/workflows/tests.yml/badge.svg)](https://github.com/mako-framework/dataclass/actions/workflows/tests.yml)\n[![Static analysis](https://github.com/mako-framework/dataclass/actions/workflows/static-analysis.yml/badge.svg)](https://github.com/mako-framework/dataclass/actions/workflows/static-analysis.yml)\n\n\n## Examples\n\n### Basic usage\n\n```php\n\u003c?php\n\nuse mako\\dataclass\\DataClass;\n\nclass User extends DataClass\n{\n\tpublic string $username;\n\tpublic string $email;\n}\n\n// Basic instantiation\n\n$user = new User(\n\tusername: 'freost',\n\temail: 'freost@example.org',\n);\n\n// Instantiation from an array\n\n$array = [\n\t'username' =\u003e 'freost',\n\t'email' =\u003e 'freost@example.org',\n];\n\n$user = new User(...$array);\n\n// Instantiation from JSON\n\n$json = \u003c\u003c\u003cJSON\n{\n\t\"username\": \"freost\",\n\t\"email\": \"freost@example.org\"\n}\nJSON;\n\n$user = User::fromJSON($json);\n\n$user = new User(...json_decode($json, associative: true));\n```\n\n### Validation\n\n```php\n\u003c?php\n\nuse mako\\dataclass\\DataClass;\nuse mako\\dataclass\\attributes\\Validator;\n\nclass User extends DataClass\n{\n\tpublic string $username;\n\tpublic string $email;\n\n\t#[Validator('username')]\n\tprotected function usernameMustNotContainSpace(string $username): string\n\t{\n\t\tif (str_contains($username, ' ') === true) {\n\t\t\tthrow new ValueError('username must not contain a space');\n\t\t}\n\n\t\treturn $username;\n\t}\n}\n\n// An error will now be thrown if the username property contains a space\n\n$user = new User(\n\tusername: 'freost',\n\temail: 'freost@example.org',\n);\n```\n\n### Nested data classes\n\n```php\n\u003c?php\n\nuse mako\\dataclass\\DataClass;\nuse mako\\dataclass\\attributes\\Validator;\n\nclass Avatar extends DataClass\n{\n\tpublic string $url;\n}\n\nclass User extends DataClass\n{\n\tpublic string $username;\n\tpublic string $email;\n\tpublic Avatar $avatar;\n}\n\n// The avatar property will be instantiated as an Avatar instance\n\n$user = new User(\n\tusername: 'freost',\n\temail: 'freost@example.org',\n\tavatar: ['url' =\u003e 'https://example.org/avatar.png'],\n);\n```\n\n### Arrays of nested data classes\n\n```php\n\u003c?php\n\nuse mako\\dataclass\\DataClass;\nuse mako\\dataclass\\attributes\\ArrayOf;\nuse mako\\dataclass\\attributes\\Validator;\n\nclass Avatar extends DataClass\n{\n\tpublic string $url;\n}\n\nclass User extends DataClass\n{\n\tpublic string $username;\n\tpublic string $email;\n\t#[ArrayOf(Avatar::class)]\n\tpublic array $avatars;\n}\n\n// The elements of the avatars property will be instantiated as Avatar instances\n\n$user = new User(\n\tusername: 'freost',\n\temail: 'freost@example.org',\n\tavatars: [['url' =\u003e 'https://example.org/avatar.png']],\n);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmako-framework%2Fdataclass","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmako-framework%2Fdataclass","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmako-framework%2Fdataclass/lists"}