import 'package:json_annotation/json_annotation.dart'; part 'bitbucket.g.dart'; @JsonSerializable(fieldRename: FieldRename.snake) class BbPagination { int pagelen; int size; int page; String next; List values; BbPagination(); factory BbPagination.fromJson(Map json) => _$BbPaginationFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbRepoOwner { String nickname; String displayName; String type; // user, team Map links; String get avatarUrl => links['avatar']['href']; BbRepoOwner(); factory BbRepoOwner.fromJson(Map json) => _$BbRepoOwnerFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbUser extends BbRepoOwner { String username; bool isStaff; DateTime createdOn; String accountId; BbUser(); factory BbUser.fromJson(Map json) => _$BbUserFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbRepo { String name; BbRepoOwner owner; String website; String language; int size; String type; // repository bool isPrivate; DateTime createdOn; DateTime updatedOn; String description; String fullName; String slug; BbRepoMainbranch mainbranch; Map links; String get ownerLogin => fullName.split('/')[0]; // owner has no username String get avatarUrl => links['avatar']['href']; BbRepo(); factory BbRepo.fromJson(Map json) => _$BbRepoFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbRepoMainbranch { String type; String name; BbRepoMainbranch(); factory BbRepoMainbranch.fromJson(Map json) => _$BbRepoMainbranchFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbTree { String type; String path; int size; Map links; BbTree(); factory BbTree.fromJson(Map json) => _$BbTreeFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbCommit { String message; DateTime date; String hash; BbCommitAuthor author; BbCommit(); factory BbCommit.fromJson(Map json) => _$BbCommitFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbCommitAuthor { String raw; BbRepoOwner user; BbCommitAuthor(); factory BbCommitAuthor.fromJson(Map json) => _$BbCommitAuthorFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbIssues { String priority; String state; BbRepo repository; String title; BbRepoOwner reporter; DateTime createdOn; Map links; String get issueLink => links['self']['href']; BbIssues(); factory BbIssues.fromJson(Map json) => _$BbIssuesFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbPulls { String description; BbRepoOwner author; String title; Map links; String get pullRequestLink => links['self']['href']; DateTime createdOn; BbPulls(); factory BbPulls.fromJson(Map json) => _$BbPullsFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbCommentContent { String raw; String markup; String html; BbCommentContent(); factory BbCommentContent.fromJson(Map json) => _$BbCommentContentFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbComment { String createdOn; String updatedOn; BbCommentContent content; BbRepoOwner user; BbComment(); factory BbComment.fromJson(Map json) => _$BbCommentFromJson(json); } @JsonSerializable(fieldRename: FieldRename.snake) class BbBranch { String name; String type; BbBranch(); factory BbBranch.fromJson(Map json) => _$BbBranchFromJson(json); }