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