// ignore_for_file: non_constant_identifier_names

// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:orm/orm.dart' as _i1;

import 'prisma.dart' as _i2;

class ProjectCountOutputType {
  const ProjectCountOutputType({
    this.tasks,
    this.timeEntries,
  });

  factory ProjectCountOutputType.fromJson(Map json) => ProjectCountOutputType(
        tasks: json['tasks'],
        timeEntries: json['timeEntries'],
      );

  final int? tasks;

  final int? timeEntries;

  Map<String, dynamic> toJson() => {
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class UserCountOutputType {
  const UserCountOutputType({
    this.projects,
    this.timeEntries,
  });

  factory UserCountOutputType.fromJson(Map json) => UserCountOutputType(
        projects: json['projects'],
        timeEntries: json['timeEntries'],
      );

  final int? projects;

  final int? timeEntries;

  Map<String, dynamic> toJson() => {
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

enum QueryMode implements _i1.PrismaEnum {
  $default._('default'),
  insensitive._('insensitive');

  const QueryMode._(this.name);

  @override
  final String name;
}

class NestedStringFilter implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedStringFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.not,
  });

  final _i1.PrismaUnion<String, _i1.Reference<String>>? equals;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>? $in;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>?
      notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i1.PrismaUnion<String, _i2.NestedStringFilter>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'not': not,
      };
}

class StringFilter implements _i1.JsonConvertible<Map<String, dynamic>> {
  const StringFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.mode,
    this.not,
  });

  final _i1.PrismaUnion<String, _i1.Reference<String>>? equals;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>? $in;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>?
      notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i2.QueryMode? mode;

  final _i1.PrismaUnion<String, _i2.NestedStringFilter>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'mode': mode,
        'not': not,
      };
}

class NestedDateTimeFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedDateTimeFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.not,
  });

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? equals;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      $in;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      notIn;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lte;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gte;

  final _i1.PrismaUnion<DateTime, _i2.NestedDateTimeFilter>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'not': not,
      };
}

class DateTimeFilter implements _i1.JsonConvertible<Map<String, dynamic>> {
  const DateTimeFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.not,
  });

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? equals;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      $in;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      notIn;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lte;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gte;

  final _i1.PrismaUnion<DateTime, _i2.NestedDateTimeFilter>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'not': not,
      };
}

class NestedStringNullableFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedStringNullableFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.not,
  });

  final _i1.PrismaUnion<String,
      _i1.PrismaUnion<_i1.Reference<String>, _i1.PrismaNull>>? equals;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? $in;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i1.PrismaUnion<String,
      _i1.PrismaUnion<_i2.NestedStringNullableFilter, _i1.PrismaNull>>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'not': not,
      };
}

class StringNullableFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const StringNullableFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.mode,
    this.not,
  });

  final _i1.PrismaUnion<String,
      _i1.PrismaUnion<_i1.Reference<String>, _i1.PrismaNull>>? equals;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? $in;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i2.QueryMode? mode;

  final _i1.PrismaUnion<String,
      _i1.PrismaUnion<_i2.NestedStringNullableFilter, _i1.PrismaNull>>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'mode': mode,
        'not': not,
      };
}

class ProjectRelationFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectRelationFilter({
    this.$is,
    this.isNot,
  });

  final _i2.ProjectWhereInput? $is;

  final _i2.ProjectWhereInput? isNot;

  @override
  Map<String, dynamic> toJson() => {
        'is': $is,
        'isNot': isNot,
      };
}

class TaskWhereInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskWhereInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.project,
  });

  final _i1.PrismaUnion<_i2.TaskWhereInput, Iterable<_i2.TaskWhereInput>>? AND;

  final Iterable<_i2.TaskWhereInput>? OR;

  final _i1.PrismaUnion<_i2.TaskWhereInput, Iterable<_i2.TaskWhereInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i1.PrismaUnion<_i2.ProjectRelationFilter, _i2.ProjectWhereInput>?
      project;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class TaskListRelationFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskListRelationFilter({
    this.every,
    this.some,
    this.none,
  });

  final _i2.TaskWhereInput? every;

  final _i2.TaskWhereInput? some;

  final _i2.TaskWhereInput? none;

  @override
  Map<String, dynamic> toJson() => {
        'every': every,
        'some': some,
        'none': none,
      };
}

class UserRelationFilter implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserRelationFilter({
    this.$is,
    this.isNot,
  });

  final _i2.UserWhereInput? $is;

  final _i2.UserWhereInput? isNot;

  @override
  Map<String, dynamic> toJson() => {
        'is': $is,
        'isNot': isNot,
      };
}

class TimeEntryWhereInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryWhereInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.user,
    this.project,
  });

  final _i1
      .PrismaUnion<_i2.TimeEntryWhereInput, Iterable<_i2.TimeEntryWhereInput>>?
      AND;

  final Iterable<_i2.TimeEntryWhereInput>? OR;

  final _i1
      .PrismaUnion<_i2.TimeEntryWhereInput, Iterable<_i2.TimeEntryWhereInput>>?
      NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? id;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? startTime;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? endTime;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringFilter, String>? userId;

  final _i1.PrismaUnion<_i2.StringFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i1.PrismaUnion<_i2.UserRelationFilter, _i2.UserWhereInput>? user;

  final _i1.PrismaUnion<_i2.ProjectRelationFilter, _i2.ProjectWhereInput>?
      project;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
        'project': project,
      };
}

class TimeEntryListRelationFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryListRelationFilter({
    this.every,
    this.some,
    this.none,
  });

  final _i2.TimeEntryWhereInput? every;

  final _i2.TimeEntryWhereInput? some;

  final _i2.TimeEntryWhereInput? none;

  @override
  Map<String, dynamic> toJson() => {
        'every': every,
        'some': some,
        'none': none,
      };
}

class ProjectWhereInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectWhereInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
    this.user,
  });

  final _i1.PrismaUnion<_i2.ProjectWhereInput, Iterable<_i2.ProjectWhereInput>>?
      AND;

  final Iterable<_i2.ProjectWhereInput>? OR;

  final _i1.PrismaUnion<_i2.ProjectWhereInput, Iterable<_i2.ProjectWhereInput>>?
      NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<_i2.StringFilter, String>? userId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i2.TaskListRelationFilter? tasks;

  final _i2.TimeEntryListRelationFilter? timeEntries;

  final _i1.PrismaUnion<_i2.UserRelationFilter, _i2.UserWhereInput>? user;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
        'user': user,
      };
}

class ProjectListRelationFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectListRelationFilter({
    this.every,
    this.some,
    this.none,
  });

  final _i2.ProjectWhereInput? every;

  final _i2.ProjectWhereInput? some;

  final _i2.ProjectWhereInput? none;

  @override
  Map<String, dynamic> toJson() => {
        'every': every,
        'some': some,
        'none': none,
      };
}

class UserWhereInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserWhereInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
  });

  final _i1.PrismaUnion<_i2.UserWhereInput, Iterable<_i2.UserWhereInput>>? AND;

  final Iterable<_i2.UserWhereInput>? OR;

  final _i1.PrismaUnion<_i2.UserWhereInput, Iterable<_i2.UserWhereInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringFilter, String>? email;

  final _i1.PrismaUnion<_i2.StringFilter, String>? password;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i2.ProjectListRelationFilter? projects;

  final _i2.TimeEntryListRelationFilter? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class UserWhereUniqueInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserWhereUniqueInput({
    this.id,
    this.email,
    this.AND,
    this.OR,
    this.NOT,
    this.name,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
  });

  final String? id;

  final String? email;

  final _i1.PrismaUnion<_i2.UserWhereInput, Iterable<_i2.UserWhereInput>>? AND;

  final Iterable<_i2.UserWhereInput>? OR;

  final _i1.PrismaUnion<_i2.UserWhereInput, Iterable<_i2.UserWhereInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringFilter, String>? password;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i2.ProjectListRelationFilter? projects;

  final _i2.TimeEntryListRelationFilter? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'email': email,
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'name': name,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class TaskProjectArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskProjectArgs({
    this.select,
    this.include,
  });

  final _i2.ProjectSelect? select;

  final _i2.ProjectInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class TaskInclude implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskInclude({this.project});

  final _i1.PrismaUnion<bool, _i2.TaskProjectArgs>? project;

  @override
  Map<String, dynamic> toJson() => {'project': project};
}

enum SortOrder implements _i1.PrismaEnum {
  asc._('asc'),
  desc._('desc');

  const SortOrder._(this.name);

  @override
  final String name;
}

enum NullsOrder implements _i1.PrismaEnum {
  first._('first'),
  last._('last');

  const NullsOrder._(this.name);

  @override
  final String name;
}

class SortOrderInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const SortOrderInput({
    required this.sort,
    this.nulls,
  });

  final _i2.SortOrder sort;

  final _i2.NullsOrder? nulls;

  @override
  Map<String, dynamic> toJson() => {
        'sort': sort,
        'nulls': nulls,
      };
}

class TaskOrderByRelationAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskOrderByRelationAggregateInput({this.$count});

  final _i2.SortOrder? $count;

  @override
  Map<String, dynamic> toJson() => {'_count': $count};
}

class TimeEntryOrderByRelationAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryOrderByRelationAggregateInput({this.$count});

  final _i2.SortOrder? $count;

  @override
  Map<String, dynamic> toJson() => {'_count': $count};
}

class ProjectOrderByRelationAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectOrderByRelationAggregateInput({this.$count});

  final _i2.SortOrder? $count;

  @override
  Map<String, dynamic> toJson() => {'_count': $count};
}

class UserOrderByWithRelationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserOrderByWithRelationInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? email;

  final _i2.SortOrder? password;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.ProjectOrderByRelationAggregateInput? projects;

  final _i2.TimeEntryOrderByRelationAggregateInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class ProjectOrderByWithRelationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectOrderByWithRelationInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
    this.user,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? description;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? clientId;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.TaskOrderByRelationAggregateInput? tasks;

  final _i2.TimeEntryOrderByRelationAggregateInput? timeEntries;

  final _i2.UserOrderByWithRelationInput? user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
        'user': user,
      };
}

class TaskOrderByWithRelationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskOrderByWithRelationInput({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.project,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? description;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.ProjectOrderByWithRelationInput? project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class TaskWhereUniqueInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskWhereUniqueInput({
    this.id,
    this.AND,
    this.OR,
    this.NOT,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.project,
  });

  final String? id;

  final _i1.PrismaUnion<_i2.TaskWhereInput, Iterable<_i2.TaskWhereInput>>? AND;

  final Iterable<_i2.TaskWhereInput>? OR;

  final _i1.PrismaUnion<_i2.TaskWhereInput, Iterable<_i2.TaskWhereInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i1.PrismaUnion<_i2.ProjectRelationFilter, _i2.ProjectWhereInput>?
      project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

enum TaskScalar<T> implements _i1.PrismaEnum, _i1.Reference<T> {
  id<String>('id', 'Task'),
  name$<String>('name', 'Task'),
  description<String>('description', 'Task'),
  projectId<String>('projectId', 'Task'),
  createdAt<DateTime>('createdAt', 'Task'),
  updatedAt<DateTime>('updatedAt', 'Task');

  const TaskScalar(
    this.name,
    this.model,
  );

  @override
  final String name;

  @override
  final String model;
}

class ProjectTasksArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectTasksArgs({
    this.where,
    this.orderBy,
    this.cursor,
    this.take,
    this.skip,
    this.distinct,
    this.select,
    this.include,
  });

  final _i2.TaskWhereInput? where;

  final _i1.PrismaUnion<Iterable<_i2.TaskOrderByWithRelationInput>,
      _i2.TaskOrderByWithRelationInput>? orderBy;

  final _i2.TaskWhereUniqueInput? cursor;

  final int? take;

  final int? skip;

  final _i1.PrismaUnion<_i2.TaskScalar, Iterable<_i2.TaskScalar>>? distinct;

  final _i2.TaskSelect? select;

  final _i2.TaskInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'orderBy': orderBy,
        'cursor': cursor,
        'take': take,
        'skip': skip,
        'distinct': distinct,
        'select': select,
        'include': include,
      };
}

class ProjectWhereUniqueInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectWhereUniqueInput({
    this.id,
    this.AND,
    this.OR,
    this.NOT,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
    this.user,
  });

  final String? id;

  final _i1.PrismaUnion<_i2.ProjectWhereInput, Iterable<_i2.ProjectWhereInput>>?
      AND;

  final Iterable<_i2.ProjectWhereInput>? OR;

  final _i1.PrismaUnion<_i2.ProjectWhereInput, Iterable<_i2.ProjectWhereInput>>?
      NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<_i2.StringFilter, String>? userId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i2.TaskListRelationFilter? tasks;

  final _i2.TimeEntryListRelationFilter? timeEntries;

  final _i1.PrismaUnion<_i2.UserRelationFilter, _i2.UserWhereInput>? user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
        'user': user,
      };
}

enum ProjectScalar<T> implements _i1.PrismaEnum, _i1.Reference<T> {
  id<String>('id', 'Project'),
  name$<String>('name', 'Project'),
  description<String>('description', 'Project'),
  clientId<String>('clientId', 'Project'),
  userId<String>('userId', 'Project'),
  createdAt<DateTime>('createdAt', 'Project'),
  updatedAt<DateTime>('updatedAt', 'Project');

  const ProjectScalar(
    this.name,
    this.model,
  );

  @override
  final String name;

  @override
  final String model;
}

class UserProjectsArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserProjectsArgs({
    this.where,
    this.orderBy,
    this.cursor,
    this.take,
    this.skip,
    this.distinct,
    this.select,
    this.include,
  });

  final _i2.ProjectWhereInput? where;

  final _i1.PrismaUnion<Iterable<_i2.ProjectOrderByWithRelationInput>,
      _i2.ProjectOrderByWithRelationInput>? orderBy;

  final _i2.ProjectWhereUniqueInput? cursor;

  final int? take;

  final int? skip;

  final _i1.PrismaUnion<_i2.ProjectScalar, Iterable<_i2.ProjectScalar>>?
      distinct;

  final _i2.ProjectSelect? select;

  final _i2.ProjectInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'orderBy': orderBy,
        'cursor': cursor,
        'take': take,
        'skip': skip,
        'distinct': distinct,
        'select': select,
        'include': include,
      };
}

class TimeEntryUserArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUserArgs({
    this.select,
    this.include,
  });

  final _i2.UserSelect? select;

  final _i2.UserInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class TimeEntryProjectArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryProjectArgs({
    this.select,
    this.include,
  });

  final _i2.ProjectSelect? select;

  final _i2.ProjectInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class TimeEntryInclude implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryInclude({
    this.user,
    this.project,
  });

  final _i1.PrismaUnion<bool, _i2.TimeEntryUserArgs>? user;

  final _i1.PrismaUnion<bool, _i2.TimeEntryProjectArgs>? project;

  @override
  Map<String, dynamic> toJson() => {
        'user': user,
        'project': project,
      };
}

class TimeEntryOrderByWithRelationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryOrderByWithRelationInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.user,
    this.project,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? startTime;

  final _i2.SortOrder? endTime;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? description;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.UserOrderByWithRelationInput? user;

  final _i2.ProjectOrderByWithRelationInput? project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
        'project': project,
      };
}

class TimeEntryWhereUniqueInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryWhereUniqueInput({
    this.id,
    this.AND,
    this.OR,
    this.NOT,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.user,
    this.project,
  });

  final String? id;

  final _i1
      .PrismaUnion<_i2.TimeEntryWhereInput, Iterable<_i2.TimeEntryWhereInput>>?
      AND;

  final Iterable<_i2.TimeEntryWhereInput>? OR;

  final _i1
      .PrismaUnion<_i2.TimeEntryWhereInput, Iterable<_i2.TimeEntryWhereInput>>?
      NOT;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? startTime;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? endTime;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringFilter, String>? userId;

  final _i1.PrismaUnion<_i2.StringFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  final _i1.PrismaUnion<_i2.UserRelationFilter, _i2.UserWhereInput>? user;

  final _i1.PrismaUnion<_i2.ProjectRelationFilter, _i2.ProjectWhereInput>?
      project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
        'project': project,
      };
}

enum TimeEntryScalar<T> implements _i1.PrismaEnum, _i1.Reference<T> {
  id<String>('id', 'TimeEntry'),
  startTime<DateTime>('startTime', 'TimeEntry'),
  endTime<DateTime>('endTime', 'TimeEntry'),
  description<String>('description', 'TimeEntry'),
  userId<String>('userId', 'TimeEntry'),
  projectId<String>('projectId', 'TimeEntry'),
  createdAt<DateTime>('createdAt', 'TimeEntry'),
  updatedAt<DateTime>('updatedAt', 'TimeEntry');

  const TimeEntryScalar(
    this.name,
    this.model,
  );

  @override
  final String name;

  @override
  final String model;
}

class UserTimeEntriesArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserTimeEntriesArgs({
    this.where,
    this.orderBy,
    this.cursor,
    this.take,
    this.skip,
    this.distinct,
    this.select,
    this.include,
  });

  final _i2.TimeEntryWhereInput? where;

  final _i1.PrismaUnion<Iterable<_i2.TimeEntryOrderByWithRelationInput>,
      _i2.TimeEntryOrderByWithRelationInput>? orderBy;

  final _i2.TimeEntryWhereUniqueInput? cursor;

  final int? take;

  final int? skip;

  final _i1.PrismaUnion<_i2.TimeEntryScalar, Iterable<_i2.TimeEntryScalar>>?
      distinct;

  final _i2.TimeEntrySelect? select;

  final _i2.TimeEntryInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'orderBy': orderBy,
        'cursor': cursor,
        'take': take,
        'skip': skip,
        'distinct': distinct,
        'select': select,
        'include': include,
      };
}

class UserCountOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCountOutputTypeSelect({
    this.projects,
    this.timeEntries,
  });

  final bool? projects;

  final bool? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class UserCountArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCountArgs({this.select});

  final _i2.UserCountOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class UserInclude implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserInclude({
    this.projects,
    this.timeEntries,
    this.$count,
  });

  final _i1.PrismaUnion<bool, _i2.UserProjectsArgs>? projects;

  final _i1.PrismaUnion<bool, _i2.UserTimeEntriesArgs>? timeEntries;

  final _i1.PrismaUnion<bool, _i2.UserCountArgs>? $count;

  @override
  Map<String, dynamic> toJson() => {
        'projects': projects,
        'timeEntries': timeEntries,
        '_count': $count,
      };
}

class TimeEntrySelect implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntrySelect({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.user,
    this.project,
  });

  final bool? id;

  final bool? startTime;

  final bool? endTime;

  final bool? description;

  final bool? userId;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.TimeEntryUserArgs>? user;

  final _i1.PrismaUnion<bool, _i2.TimeEntryProjectArgs>? project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
        'project': project,
      };
}

class ProjectTimeEntriesArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectTimeEntriesArgs({
    this.where,
    this.orderBy,
    this.cursor,
    this.take,
    this.skip,
    this.distinct,
    this.select,
    this.include,
  });

  final _i2.TimeEntryWhereInput? where;

  final _i1.PrismaUnion<Iterable<_i2.TimeEntryOrderByWithRelationInput>,
      _i2.TimeEntryOrderByWithRelationInput>? orderBy;

  final _i2.TimeEntryWhereUniqueInput? cursor;

  final int? take;

  final int? skip;

  final _i1.PrismaUnion<_i2.TimeEntryScalar, Iterable<_i2.TimeEntryScalar>>?
      distinct;

  final _i2.TimeEntrySelect? select;

  final _i2.TimeEntryInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'orderBy': orderBy,
        'cursor': cursor,
        'take': take,
        'skip': skip,
        'distinct': distinct,
        'select': select,
        'include': include,
      };
}

class ProjectUserArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUserArgs({
    this.select,
    this.include,
  });

  final _i2.UserSelect? select;

  final _i2.UserInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class ProjectCountOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCountOutputTypeSelect({
    this.tasks,
    this.timeEntries,
  });

  final bool? tasks;

  final bool? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class ProjectCountArgs implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCountArgs({this.select});

  final _i2.ProjectCountOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class ProjectInclude implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectInclude({
    this.tasks,
    this.timeEntries,
    this.user,
    this.$count,
  });

  final _i1.PrismaUnion<bool, _i2.ProjectTasksArgs>? tasks;

  final _i1.PrismaUnion<bool, _i2.ProjectTimeEntriesArgs>? timeEntries;

  final _i1.PrismaUnion<bool, _i2.ProjectUserArgs>? user;

  final _i1.PrismaUnion<bool, _i2.ProjectCountArgs>? $count;

  @override
  Map<String, dynamic> toJson() => {
        'tasks': tasks,
        'timeEntries': timeEntries,
        'user': user,
        '_count': $count,
      };
}

class TaskSelect implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskSelect({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.project,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.TaskProjectArgs>? project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class ProjectSelect implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectSelect({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
    this.user,
    this.$count,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? clientId;

  final bool? userId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.ProjectTasksArgs>? tasks;

  final _i1.PrismaUnion<bool, _i2.ProjectTimeEntriesArgs>? timeEntries;

  final _i1.PrismaUnion<bool, _i2.ProjectUserArgs>? user;

  final _i1.PrismaUnion<bool, _i2.ProjectCountArgs>? $count;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
        'user': user,
        '_count': $count,
      };
}

class UserSelect implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserSelect({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
    this.$count,
  });

  final bool? id;

  final bool? name;

  final bool? email;

  final bool? password;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.UserProjectsArgs>? projects;

  final _i1.PrismaUnion<bool, _i2.UserTimeEntriesArgs>? timeEntries;

  final _i1.PrismaUnion<bool, _i2.UserCountArgs>? $count;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
        '_count': $count,
      };
}

enum UserScalar<T> implements _i1.PrismaEnum, _i1.Reference<T> {
  id<String>('id', 'User'),
  name$<String>('name', 'User'),
  email<String>('email', 'User'),
  password<String>('password', 'User'),
  createdAt<DateTime>('createdAt', 'User'),
  updatedAt<DateTime>('updatedAt', 'User');

  const UserScalar(
    this.name,
    this.model,
  );

  @override
  final String name;

  @override
  final String model;
}

class TaskCreateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCreateWithoutProjectInput({
    this.id,
    required this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskUncheckedCreateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedCreateWithoutProjectInput({
    this.id,
    required this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskCreateOrConnectWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCreateOrConnectWithoutProjectInput({
    required this.where,
    required this.create,
  });

  final _i2.TaskWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TaskCreateWithoutProjectInput,
      _i2.TaskUncheckedCreateWithoutProjectInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class TaskCreateManyProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCreateManyProjectInput({
    this.id,
    required this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskCreateManyProjectInputEnvelope
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCreateManyProjectInputEnvelope({
    required this.data,
    this.skipDuplicates,
  });

  final _i1.PrismaUnion<_i2.TaskCreateManyProjectInput,
      Iterable<_i2.TaskCreateManyProjectInput>> data;

  final bool? skipDuplicates;

  @override
  Map<String, dynamic> toJson() => {
        'data': data,
        'skipDuplicates': skipDuplicates,
      };
}

class TaskCreateNestedManyWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCreateNestedManyWithoutProjectInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
      _i2.TaskCreateWithoutProjectInput,
      _i1.PrismaUnion<
          Iterable<_i2.TaskCreateWithoutProjectInput>,
          _i1.PrismaUnion<_i2.TaskUncheckedCreateWithoutProjectInput,
              Iterable<_i2.TaskUncheckedCreateWithoutProjectInput>>>>? create;

  final _i1.PrismaUnion<_i2.TaskCreateOrConnectWithoutProjectInput,
      Iterable<_i2.TaskCreateOrConnectWithoutProjectInput>>? connectOrCreate;

  final _i2.TaskCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class UserCreateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateWithoutTimeEntriesInput({
    this.id,
    required this.name,
    required this.email,
    required this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
  });

  final String? id;

  final String name;

  final String email;

  final String password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.ProjectCreateNestedManyWithoutUserInput? projects;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
      };
}

class TaskUncheckedCreateNestedManyWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedCreateNestedManyWithoutProjectInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
      _i2.TaskCreateWithoutProjectInput,
      _i1.PrismaUnion<
          Iterable<_i2.TaskCreateWithoutProjectInput>,
          _i1.PrismaUnion<_i2.TaskUncheckedCreateWithoutProjectInput,
              Iterable<_i2.TaskUncheckedCreateWithoutProjectInput>>>>? create;

  final _i1.PrismaUnion<_i2.TaskCreateOrConnectWithoutProjectInput,
      Iterable<_i2.TaskCreateOrConnectWithoutProjectInput>>? connectOrCreate;

  final _i2.TaskCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class TimeEntryUncheckedCreateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedCreateWithoutProjectInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    required this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryCreateOrConnectWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateOrConnectWithoutProjectInput({
    required this.where,
    required this.create,
  });

  final _i2.TimeEntryWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TimeEntryCreateWithoutProjectInput,
      _i2.TimeEntryUncheckedCreateWithoutProjectInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class TimeEntryCreateManyProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateManyProjectInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    required this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryCreateManyProjectInputEnvelope
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateManyProjectInputEnvelope({
    required this.data,
    this.skipDuplicates,
  });

  final _i1.PrismaUnion<_i2.TimeEntryCreateManyProjectInput,
      Iterable<_i2.TimeEntryCreateManyProjectInput>> data;

  final bool? skipDuplicates;

  @override
  Map<String, dynamic> toJson() => {
        'data': data,
        'skipDuplicates': skipDuplicates,
      };
}

class TimeEntryUncheckedCreateNestedManyWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedCreateNestedManyWithoutProjectInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
          _i2.TimeEntryCreateWithoutProjectInput,
          _i1.PrismaUnion<
              Iterable<_i2.TimeEntryCreateWithoutProjectInput>,
              _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutProjectInput,
                  Iterable<_i2.TimeEntryUncheckedCreateWithoutProjectInput>>>>?
      create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutProjectInput,
          Iterable<_i2.TimeEntryCreateOrConnectWithoutProjectInput>>?
      connectOrCreate;

  final _i2.TimeEntryCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class ProjectUncheckedCreateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedCreateWithoutUserInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TaskUncheckedCreateNestedManyWithoutProjectInput? tasks;

  final _i2.TimeEntryUncheckedCreateNestedManyWithoutProjectInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class ProjectCreateOrConnectWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateOrConnectWithoutUserInput({
    required this.where,
    required this.create,
  });

  final _i2.ProjectWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutUserInput,
      _i2.ProjectUncheckedCreateWithoutUserInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class ProjectCreateManyUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateManyUserInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectCreateManyUserInputEnvelope
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateManyUserInputEnvelope({
    required this.data,
    this.skipDuplicates,
  });

  final _i1.PrismaUnion<_i2.ProjectCreateManyUserInput,
      Iterable<_i2.ProjectCreateManyUserInput>> data;

  final bool? skipDuplicates;

  @override
  Map<String, dynamic> toJson() => {
        'data': data,
        'skipDuplicates': skipDuplicates,
      };
}

class ProjectUncheckedCreateNestedManyWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedCreateNestedManyWithoutUserInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
      _i2.ProjectCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.ProjectCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.ProjectUncheckedCreateWithoutUserInput,
              Iterable<_i2.ProjectUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.ProjectCreateOrConnectWithoutUserInput,
      Iterable<_i2.ProjectCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i2.ProjectCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class UserUncheckedCreateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUncheckedCreateWithoutTimeEntriesInput({
    this.id,
    required this.name,
    required this.email,
    required this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
  });

  final String? id;

  final String name;

  final String email;

  final String password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.ProjectUncheckedCreateNestedManyWithoutUserInput? projects;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
      };
}

class UserCreateOrConnectWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateOrConnectWithoutTimeEntriesInput({
    required this.where,
    required this.create,
  });

  final _i2.UserWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.UserCreateWithoutTimeEntriesInput,
      _i2.UserUncheckedCreateWithoutTimeEntriesInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class UserCreateNestedOneWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateNestedOneWithoutTimeEntriesInput({
    this.create,
    this.connectOrCreate,
    this.connect,
  });

  final _i1.PrismaUnion<_i2.UserCreateWithoutTimeEntriesInput,
      _i2.UserUncheckedCreateWithoutTimeEntriesInput>? create;

  final _i2.UserCreateOrConnectWithoutTimeEntriesInput? connectOrCreate;

  final _i2.UserWhereUniqueInput? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'connect': connect,
      };
}

class TimeEntryCreateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateWithoutProjectInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    this.createdAt,
    this.updatedAt,
    required this.user,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.UserCreateNestedOneWithoutTimeEntriesInput user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
      };
}

class TimeEntryCreateNestedManyWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateNestedManyWithoutProjectInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
          _i2.TimeEntryCreateWithoutProjectInput,
          _i1.PrismaUnion<
              Iterable<_i2.TimeEntryCreateWithoutProjectInput>,
              _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutProjectInput,
                  Iterable<_i2.TimeEntryUncheckedCreateWithoutProjectInput>>>>?
      create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutProjectInput,
          Iterable<_i2.TimeEntryCreateOrConnectWithoutProjectInput>>?
      connectOrCreate;

  final _i2.TimeEntryCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class ProjectCreateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateWithoutUserInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TaskCreateNestedManyWithoutProjectInput? tasks;

  final _i2.TimeEntryCreateNestedManyWithoutProjectInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class ProjectCreateNestedManyWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateNestedManyWithoutUserInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
      _i2.ProjectCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.ProjectCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.ProjectUncheckedCreateWithoutUserInput,
              Iterable<_i2.ProjectUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.ProjectCreateOrConnectWithoutUserInput,
      Iterable<_i2.ProjectCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i2.ProjectCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class UserCreateWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateWithoutProjectsInput({
    this.id,
    required this.name,
    required this.email,
    required this.password,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final String email;

  final String password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TimeEntryCreateNestedManyWithoutUserInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
      };
}

class TimeEntryUncheckedCreateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedCreateWithoutUserInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    required this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryCreateOrConnectWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateOrConnectWithoutUserInput({
    required this.where,
    required this.create,
  });

  final _i2.TimeEntryWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TimeEntryCreateWithoutUserInput,
      _i2.TimeEntryUncheckedCreateWithoutUserInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class TimeEntryCreateManyUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateManyUserInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    required this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryCreateManyUserInputEnvelope
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateManyUserInputEnvelope({
    required this.data,
    this.skipDuplicates,
  });

  final _i1.PrismaUnion<_i2.TimeEntryCreateManyUserInput,
      Iterable<_i2.TimeEntryCreateManyUserInput>> data;

  final bool? skipDuplicates;

  @override
  Map<String, dynamic> toJson() => {
        'data': data,
        'skipDuplicates': skipDuplicates,
      };
}

class TimeEntryUncheckedCreateNestedManyWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedCreateNestedManyWithoutUserInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
      _i2.TimeEntryCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.TimeEntryCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutUserInput,
              Iterable<_i2.TimeEntryUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutUserInput,
      Iterable<_i2.TimeEntryCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i2.TimeEntryCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class UserUncheckedCreateWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUncheckedCreateWithoutProjectsInput({
    this.id,
    required this.name,
    required this.email,
    required this.password,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final String email;

  final String password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TimeEntryUncheckedCreateNestedManyWithoutUserInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
      };
}

class UserCreateOrConnectWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateOrConnectWithoutProjectsInput({
    required this.where,
    required this.create,
  });

  final _i2.UserWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.UserCreateWithoutProjectsInput,
      _i2.UserUncheckedCreateWithoutProjectsInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class UserCreateNestedOneWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateNestedOneWithoutProjectsInput({
    this.create,
    this.connectOrCreate,
    this.connect,
  });

  final _i1.PrismaUnion<_i2.UserCreateWithoutProjectsInput,
      _i2.UserUncheckedCreateWithoutProjectsInput>? create;

  final _i2.UserCreateOrConnectWithoutProjectsInput? connectOrCreate;

  final _i2.UserWhereUniqueInput? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'connect': connect,
      };
}

class ProjectCreateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateWithoutTimeEntriesInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    required this.user,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TaskCreateNestedManyWithoutProjectInput? tasks;

  final _i2.UserCreateNestedOneWithoutProjectsInput user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'user': user,
      };
}

class ProjectUncheckedCreateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedCreateWithoutTimeEntriesInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    required this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final String userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TaskUncheckedCreateNestedManyWithoutProjectInput? tasks;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
      };
}

class ProjectCreateOrConnectWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateOrConnectWithoutTimeEntriesInput({
    required this.where,
    required this.create,
  });

  final _i2.ProjectWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTimeEntriesInput,
      _i2.ProjectUncheckedCreateWithoutTimeEntriesInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class ProjectCreateNestedOneWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateNestedOneWithoutTimeEntriesInput({
    this.create,
    this.connectOrCreate,
    this.connect,
  });

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTimeEntriesInput,
      _i2.ProjectUncheckedCreateWithoutTimeEntriesInput>? create;

  final _i2.ProjectCreateOrConnectWithoutTimeEntriesInput? connectOrCreate;

  final _i2.ProjectWhereUniqueInput? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'connect': connect,
      };
}

class TimeEntryCreateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateWithoutUserInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    this.createdAt,
    this.updatedAt,
    required this.project,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.ProjectCreateNestedOneWithoutTimeEntriesInput project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class TimeEntryCreateNestedManyWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateNestedManyWithoutUserInput({
    this.create,
    this.connectOrCreate,
    this.createMany,
    this.connect,
  });

  final _i1.PrismaUnion<
      _i2.TimeEntryCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.TimeEntryCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutUserInput,
              Iterable<_i2.TimeEntryUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutUserInput,
      Iterable<_i2.TimeEntryCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i2.TimeEntryCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'createMany': createMany,
        'connect': connect,
      };
}

class UserCreateInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateInput({
    this.id,
    required this.name,
    required this.email,
    required this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final String email;

  final String password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.ProjectCreateNestedManyWithoutUserInput? projects;

  final _i2.TimeEntryCreateNestedManyWithoutUserInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class UserUncheckedCreateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUncheckedCreateInput({
    this.id,
    required this.name,
    required this.email,
    required this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final String email;

  final String password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.ProjectUncheckedCreateNestedManyWithoutUserInput? projects;

  final _i2.TimeEntryUncheckedCreateNestedManyWithoutUserInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class AffectedRowsOutput {
  const AffectedRowsOutput({this.count});

  factory AffectedRowsOutput.fromJson(Map json) =>
      AffectedRowsOutput(count: json['count']);

  final int? count;

  Map<String, dynamic> toJson() => {'count': count};
}

class UserCreateManyInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCreateManyInput({
    this.id,
    required this.name,
    required this.email,
    required this.password,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final String email;

  final String password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class CreateManyUserAndReturnOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyUserAndReturnOutputTypeSelect({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? name;

  final bool? email;

  final bool? password;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class StringFieldUpdateOperationsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const StringFieldUpdateOperationsInput({this.set});

  final String? set;

  @override
  Map<String, dynamic> toJson() => {'set': set};
}

class DateTimeFieldUpdateOperationsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const DateTimeFieldUpdateOperationsInput({this.set});

  final DateTime? set;

  @override
  Map<String, dynamic> toJson() => {'set': set};
}

class NullableStringFieldUpdateOperationsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NullableStringFieldUpdateOperationsInput({this.set});

  final _i1.PrismaUnion<String, _i1.PrismaNull>? set;

  @override
  Map<String, dynamic> toJson() => {'set': set};
}

class TaskUpdateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUpdateWithoutProjectInput({
    this.id,
    this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskUncheckedUpdateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedUpdateWithoutProjectInput({
    this.id,
    this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskUpsertWithWhereUniqueWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUpsertWithWhereUniqueWithoutProjectInput({
    required this.where,
    required this.update,
    required this.create,
  });

  final _i2.TaskWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TaskUpdateWithoutProjectInput,
      _i2.TaskUncheckedUpdateWithoutProjectInput> update;

  final _i1.PrismaUnion<_i2.TaskCreateWithoutProjectInput,
      _i2.TaskUncheckedCreateWithoutProjectInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'update': update,
        'create': create,
      };
}

class TaskUpdateWithWhereUniqueWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUpdateWithWhereUniqueWithoutProjectInput({
    required this.where,
    required this.data,
  });

  final _i2.TaskWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TaskUpdateWithoutProjectInput,
      _i2.TaskUncheckedUpdateWithoutProjectInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class TaskScalarWhereInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskScalarWhereInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<_i2.TaskScalarWhereInput,
      Iterable<_i2.TaskScalarWhereInput>>? AND;

  final Iterable<_i2.TaskScalarWhereInput>? OR;

  final _i1.PrismaUnion<_i2.TaskScalarWhereInput,
      Iterable<_i2.TaskScalarWhereInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskUpdateManyMutationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUpdateManyMutationInput({
    this.id,
    this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskUncheckedUpdateManyWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedUpdateManyWithoutProjectInput({
    this.id,
    this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskUpdateManyWithWhereWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUpdateManyWithWhereWithoutProjectInput({
    required this.where,
    required this.data,
  });

  final _i2.TaskScalarWhereInput where;

  final _i1.PrismaUnion<_i2.TaskUpdateManyMutationInput,
      _i2.TaskUncheckedUpdateManyWithoutProjectInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class TaskUpdateManyWithoutProjectNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUpdateManyWithoutProjectNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
      _i2.TaskCreateWithoutProjectInput,
      _i1.PrismaUnion<
          Iterable<_i2.TaskCreateWithoutProjectInput>,
          _i1.PrismaUnion<_i2.TaskUncheckedCreateWithoutProjectInput,
              Iterable<_i2.TaskUncheckedCreateWithoutProjectInput>>>>? create;

  final _i1.PrismaUnion<_i2.TaskCreateOrConnectWithoutProjectInput,
      Iterable<_i2.TaskCreateOrConnectWithoutProjectInput>>? connectOrCreate;

  final _i1.PrismaUnion<_i2.TaskUpsertWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TaskUpsertWithWhereUniqueWithoutProjectInput>>? upsert;

  final _i2.TaskCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.TaskUpdateWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TaskUpdateWithWhereUniqueWithoutProjectInput>>? update;

  final _i1.PrismaUnion<_i2.TaskUpdateManyWithWhereWithoutProjectInput,
      Iterable<_i2.TaskUpdateManyWithWhereWithoutProjectInput>>? updateMany;

  final _i1.PrismaUnion<_i2.TaskScalarWhereInput,
      Iterable<_i2.TaskScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class UserUpdateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateWithoutTimeEntriesInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.ProjectUpdateManyWithoutUserNestedInput? projects;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
      };
}

class TaskUncheckedUpdateManyWithoutProjectNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedUpdateManyWithoutProjectNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
      _i2.TaskCreateWithoutProjectInput,
      _i1.PrismaUnion<
          Iterable<_i2.TaskCreateWithoutProjectInput>,
          _i1.PrismaUnion<_i2.TaskUncheckedCreateWithoutProjectInput,
              Iterable<_i2.TaskUncheckedCreateWithoutProjectInput>>>>? create;

  final _i1.PrismaUnion<_i2.TaskCreateOrConnectWithoutProjectInput,
      Iterable<_i2.TaskCreateOrConnectWithoutProjectInput>>? connectOrCreate;

  final _i1.PrismaUnion<_i2.TaskUpsertWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TaskUpsertWithWhereUniqueWithoutProjectInput>>? upsert;

  final _i2.TaskCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.TaskWhereUniqueInput,
      Iterable<_i2.TaskWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.TaskUpdateWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TaskUpdateWithWhereUniqueWithoutProjectInput>>? update;

  final _i1.PrismaUnion<_i2.TaskUpdateManyWithWhereWithoutProjectInput,
      Iterable<_i2.TaskUpdateManyWithWhereWithoutProjectInput>>? updateMany;

  final _i1.PrismaUnion<_i2.TaskScalarWhereInput,
      Iterable<_i2.TaskScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class TimeEntryUncheckedUpdateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateWithoutProjectInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryUpdateWithWhereUniqueWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateWithWhereUniqueWithoutProjectInput({
    required this.where,
    required this.data,
  });

  final _i2.TimeEntryWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithoutProjectInput,
      _i2.TimeEntryUncheckedUpdateWithoutProjectInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class TimeEntryScalarWhereInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryScalarWhereInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereInput,
      Iterable<_i2.TimeEntryScalarWhereInput>>? AND;

  final Iterable<_i2.TimeEntryScalarWhereInput>? OR;

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereInput,
      Iterable<_i2.TimeEntryScalarWhereInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? id;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? startTime;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? endTime;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringFilter, String>? userId;

  final _i1.PrismaUnion<_i2.StringFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryUpdateManyMutationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateManyMutationInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryUncheckedUpdateManyWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateManyWithoutProjectInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryUpdateManyWithWhereWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateManyWithWhereWithoutProjectInput({
    required this.where,
    required this.data,
  });

  final _i2.TimeEntryScalarWhereInput where;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateManyMutationInput,
      _i2.TimeEntryUncheckedUpdateManyWithoutProjectInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class TimeEntryUncheckedUpdateManyWithoutProjectNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateManyWithoutProjectNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
          _i2.TimeEntryCreateWithoutProjectInput,
          _i1.PrismaUnion<
              Iterable<_i2.TimeEntryCreateWithoutProjectInput>,
              _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutProjectInput,
                  Iterable<_i2.TimeEntryUncheckedCreateWithoutProjectInput>>>>?
      create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutProjectInput,
          Iterable<_i2.TimeEntryCreateOrConnectWithoutProjectInput>>?
      connectOrCreate;

  final _i1.PrismaUnion<_i2.TimeEntryUpsertWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TimeEntryUpsertWithWhereUniqueWithoutProjectInput>>? upsert;

  final _i2.TimeEntryCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TimeEntryUpdateWithWhereUniqueWithoutProjectInput>>? update;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateManyWithWhereWithoutProjectInput,
          Iterable<_i2.TimeEntryUpdateManyWithWhereWithoutProjectInput>>?
      updateMany;

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereInput,
      Iterable<_i2.TimeEntryScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class ProjectUncheckedUpdateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedUpdateWithoutUserInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TaskUncheckedUpdateManyWithoutProjectNestedInput? tasks;

  final _i2.TimeEntryUncheckedUpdateManyWithoutProjectNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class ProjectUpdateWithWhereUniqueWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateWithWhereUniqueWithoutUserInput({
    required this.where,
    required this.data,
  });

  final _i2.ProjectWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.ProjectUpdateWithoutUserInput,
      _i2.ProjectUncheckedUpdateWithoutUserInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class ProjectScalarWhereInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectScalarWhereInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<_i2.ProjectScalarWhereInput,
      Iterable<_i2.ProjectScalarWhereInput>>? AND;

  final Iterable<_i2.ProjectScalarWhereInput>? OR;

  final _i1.PrismaUnion<_i2.ProjectScalarWhereInput,
      Iterable<_i2.ProjectScalarWhereInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringNullableFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<_i2.StringFilter, String>? userId;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeFilter, DateTime>? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectUpdateManyMutationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateManyMutationInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectUncheckedUpdateManyWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedUpdateManyWithoutUserInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectUpdateManyWithWhereWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateManyWithWhereWithoutUserInput({
    required this.where,
    required this.data,
  });

  final _i2.ProjectScalarWhereInput where;

  final _i1.PrismaUnion<_i2.ProjectUpdateManyMutationInput,
      _i2.ProjectUncheckedUpdateManyWithoutUserInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class ProjectUncheckedUpdateManyWithoutUserNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedUpdateManyWithoutUserNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
      _i2.ProjectCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.ProjectCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.ProjectUncheckedCreateWithoutUserInput,
              Iterable<_i2.ProjectUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.ProjectCreateOrConnectWithoutUserInput,
      Iterable<_i2.ProjectCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i1.PrismaUnion<_i2.ProjectUpsertWithWhereUniqueWithoutUserInput,
      Iterable<_i2.ProjectUpsertWithWhereUniqueWithoutUserInput>>? upsert;

  final _i2.ProjectCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.ProjectUpdateWithWhereUniqueWithoutUserInput,
      Iterable<_i2.ProjectUpdateWithWhereUniqueWithoutUserInput>>? update;

  final _i1.PrismaUnion<_i2.ProjectUpdateManyWithWhereWithoutUserInput,
      Iterable<_i2.ProjectUpdateManyWithWhereWithoutUserInput>>? updateMany;

  final _i1.PrismaUnion<_i2.ProjectScalarWhereInput,
      Iterable<_i2.ProjectScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class UserUncheckedUpdateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUncheckedUpdateWithoutTimeEntriesInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.ProjectUncheckedUpdateManyWithoutUserNestedInput? projects;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
      };
}

class UserUpsertWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpsertWithoutTimeEntriesInput({
    required this.update,
    required this.create,
    this.where,
  });

  final _i1.PrismaUnion<_i2.UserUpdateWithoutTimeEntriesInput,
      _i2.UserUncheckedUpdateWithoutTimeEntriesInput> update;

  final _i1.PrismaUnion<_i2.UserCreateWithoutTimeEntriesInput,
      _i2.UserUncheckedCreateWithoutTimeEntriesInput> create;

  final _i2.UserWhereInput? where;

  @override
  Map<String, dynamic> toJson() => {
        'update': update,
        'create': create,
        'where': where,
      };
}

class UserUpdateToOneWithWhereWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateToOneWithWhereWithoutTimeEntriesInput({
    this.where,
    required this.data,
  });

  final _i2.UserWhereInput? where;

  final _i1.PrismaUnion<_i2.UserUpdateWithoutTimeEntriesInput,
      _i2.UserUncheckedUpdateWithoutTimeEntriesInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class UserUpdateOneRequiredWithoutTimeEntriesNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateOneRequiredWithoutTimeEntriesNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.connect,
    this.update,
  });

  final _i1.PrismaUnion<_i2.UserCreateWithoutTimeEntriesInput,
      _i2.UserUncheckedCreateWithoutTimeEntriesInput>? create;

  final _i2.UserCreateOrConnectWithoutTimeEntriesInput? connectOrCreate;

  final _i2.UserUpsertWithoutTimeEntriesInput? upsert;

  final _i2.UserWhereUniqueInput? connect;

  final _i1.PrismaUnion<
      _i2.UserUpdateToOneWithWhereWithoutTimeEntriesInput,
      _i1.PrismaUnion<_i2.UserUpdateWithoutTimeEntriesInput,
          _i2.UserUncheckedUpdateWithoutTimeEntriesInput>>? update;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'connect': connect,
        'update': update,
      };
}

class TimeEntryUpdateWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateWithoutProjectInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.createdAt,
    this.updatedAt,
    this.user,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.UserUpdateOneRequiredWithoutTimeEntriesNestedInput? user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
      };
}

class TimeEntryUpsertWithWhereUniqueWithoutProjectInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpsertWithWhereUniqueWithoutProjectInput({
    required this.where,
    required this.update,
    required this.create,
  });

  final _i2.TimeEntryWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithoutProjectInput,
      _i2.TimeEntryUncheckedUpdateWithoutProjectInput> update;

  final _i1.PrismaUnion<_i2.TimeEntryCreateWithoutProjectInput,
      _i2.TimeEntryUncheckedCreateWithoutProjectInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'update': update,
        'create': create,
      };
}

class TimeEntryUpdateManyWithoutProjectNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateManyWithoutProjectNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
          _i2.TimeEntryCreateWithoutProjectInput,
          _i1.PrismaUnion<
              Iterable<_i2.TimeEntryCreateWithoutProjectInput>,
              _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutProjectInput,
                  Iterable<_i2.TimeEntryUncheckedCreateWithoutProjectInput>>>>?
      create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutProjectInput,
          Iterable<_i2.TimeEntryCreateOrConnectWithoutProjectInput>>?
      connectOrCreate;

  final _i1.PrismaUnion<_i2.TimeEntryUpsertWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TimeEntryUpsertWithWhereUniqueWithoutProjectInput>>? upsert;

  final _i2.TimeEntryCreateManyProjectInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithWhereUniqueWithoutProjectInput,
      Iterable<_i2.TimeEntryUpdateWithWhereUniqueWithoutProjectInput>>? update;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateManyWithWhereWithoutProjectInput,
          Iterable<_i2.TimeEntryUpdateManyWithWhereWithoutProjectInput>>?
      updateMany;

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereInput,
      Iterable<_i2.TimeEntryScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class ProjectUpdateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateWithoutUserInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TaskUpdateManyWithoutProjectNestedInput? tasks;

  final _i2.TimeEntryUpdateManyWithoutProjectNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class ProjectUpsertWithWhereUniqueWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpsertWithWhereUniqueWithoutUserInput({
    required this.where,
    required this.update,
    required this.create,
  });

  final _i2.ProjectWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.ProjectUpdateWithoutUserInput,
      _i2.ProjectUncheckedUpdateWithoutUserInput> update;

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutUserInput,
      _i2.ProjectUncheckedCreateWithoutUserInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'update': update,
        'create': create,
      };
}

class ProjectUpdateManyWithoutUserNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateManyWithoutUserNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
      _i2.ProjectCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.ProjectCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.ProjectUncheckedCreateWithoutUserInput,
              Iterable<_i2.ProjectUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.ProjectCreateOrConnectWithoutUserInput,
      Iterable<_i2.ProjectCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i1.PrismaUnion<_i2.ProjectUpsertWithWhereUniqueWithoutUserInput,
      Iterable<_i2.ProjectUpsertWithWhereUniqueWithoutUserInput>>? upsert;

  final _i2.ProjectCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.ProjectWhereUniqueInput,
      Iterable<_i2.ProjectWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.ProjectUpdateWithWhereUniqueWithoutUserInput,
      Iterable<_i2.ProjectUpdateWithWhereUniqueWithoutUserInput>>? update;

  final _i1.PrismaUnion<_i2.ProjectUpdateManyWithWhereWithoutUserInput,
      Iterable<_i2.ProjectUpdateManyWithWhereWithoutUserInput>>? updateMany;

  final _i1.PrismaUnion<_i2.ProjectScalarWhereInput,
      Iterable<_i2.ProjectScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class UserUpdateWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateWithoutProjectsInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TimeEntryUpdateManyWithoutUserNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
      };
}

class TimeEntryUncheckedUpdateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateWithoutUserInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>?
      projectId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryUpdateWithWhereUniqueWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateWithWhereUniqueWithoutUserInput({
    required this.where,
    required this.data,
  });

  final _i2.TimeEntryWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithoutUserInput,
      _i2.TimeEntryUncheckedUpdateWithoutUserInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class TimeEntryUncheckedUpdateManyWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateManyWithoutUserInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>?
      projectId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryUpdateManyWithWhereWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateManyWithWhereWithoutUserInput({
    required this.where,
    required this.data,
  });

  final _i2.TimeEntryScalarWhereInput where;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateManyMutationInput,
      _i2.TimeEntryUncheckedUpdateManyWithoutUserInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class TimeEntryUncheckedUpdateManyWithoutUserNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateManyWithoutUserNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
      _i2.TimeEntryCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.TimeEntryCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutUserInput,
              Iterable<_i2.TimeEntryUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutUserInput,
      Iterable<_i2.TimeEntryCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i1.PrismaUnion<_i2.TimeEntryUpsertWithWhereUniqueWithoutUserInput,
      Iterable<_i2.TimeEntryUpsertWithWhereUniqueWithoutUserInput>>? upsert;

  final _i2.TimeEntryCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithWhereUniqueWithoutUserInput,
      Iterable<_i2.TimeEntryUpdateWithWhereUniqueWithoutUserInput>>? update;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateManyWithWhereWithoutUserInput,
      Iterable<_i2.TimeEntryUpdateManyWithWhereWithoutUserInput>>? updateMany;

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereInput,
      Iterable<_i2.TimeEntryScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class UserUncheckedUpdateWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUncheckedUpdateWithoutProjectsInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TimeEntryUncheckedUpdateManyWithoutUserNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
      };
}

class UserUpsertWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpsertWithoutProjectsInput({
    required this.update,
    required this.create,
    this.where,
  });

  final _i1.PrismaUnion<_i2.UserUpdateWithoutProjectsInput,
      _i2.UserUncheckedUpdateWithoutProjectsInput> update;

  final _i1.PrismaUnion<_i2.UserCreateWithoutProjectsInput,
      _i2.UserUncheckedCreateWithoutProjectsInput> create;

  final _i2.UserWhereInput? where;

  @override
  Map<String, dynamic> toJson() => {
        'update': update,
        'create': create,
        'where': where,
      };
}

class UserUpdateToOneWithWhereWithoutProjectsInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateToOneWithWhereWithoutProjectsInput({
    this.where,
    required this.data,
  });

  final _i2.UserWhereInput? where;

  final _i1.PrismaUnion<_i2.UserUpdateWithoutProjectsInput,
      _i2.UserUncheckedUpdateWithoutProjectsInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class UserUpdateOneRequiredWithoutProjectsNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateOneRequiredWithoutProjectsNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.connect,
    this.update,
  });

  final _i1.PrismaUnion<_i2.UserCreateWithoutProjectsInput,
      _i2.UserUncheckedCreateWithoutProjectsInput>? create;

  final _i2.UserCreateOrConnectWithoutProjectsInput? connectOrCreate;

  final _i2.UserUpsertWithoutProjectsInput? upsert;

  final _i2.UserWhereUniqueInput? connect;

  final _i1.PrismaUnion<
      _i2.UserUpdateToOneWithWhereWithoutProjectsInput,
      _i1.PrismaUnion<_i2.UserUpdateWithoutProjectsInput,
          _i2.UserUncheckedUpdateWithoutProjectsInput>>? update;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'connect': connect,
        'update': update,
      };
}

class ProjectUpdateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateWithoutTimeEntriesInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.user,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TaskUpdateManyWithoutProjectNestedInput? tasks;

  final _i2.UserUpdateOneRequiredWithoutProjectsNestedInput? user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'user': user,
      };
}

class ProjectUncheckedUpdateWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedUpdateWithoutTimeEntriesInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TaskUncheckedUpdateManyWithoutProjectNestedInput? tasks;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
      };
}

class ProjectUpsertWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpsertWithoutTimeEntriesInput({
    required this.update,
    required this.create,
    this.where,
  });

  final _i1.PrismaUnion<_i2.ProjectUpdateWithoutTimeEntriesInput,
      _i2.ProjectUncheckedUpdateWithoutTimeEntriesInput> update;

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTimeEntriesInput,
      _i2.ProjectUncheckedCreateWithoutTimeEntriesInput> create;

  final _i2.ProjectWhereInput? where;

  @override
  Map<String, dynamic> toJson() => {
        'update': update,
        'create': create,
        'where': where,
      };
}

class ProjectUpdateToOneWithWhereWithoutTimeEntriesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateToOneWithWhereWithoutTimeEntriesInput({
    this.where,
    required this.data,
  });

  final _i2.ProjectWhereInput? where;

  final _i1.PrismaUnion<_i2.ProjectUpdateWithoutTimeEntriesInput,
      _i2.ProjectUncheckedUpdateWithoutTimeEntriesInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class ProjectUpdateOneRequiredWithoutTimeEntriesNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateOneRequiredWithoutTimeEntriesNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.connect,
    this.update,
  });

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTimeEntriesInput,
      _i2.ProjectUncheckedCreateWithoutTimeEntriesInput>? create;

  final _i2.ProjectCreateOrConnectWithoutTimeEntriesInput? connectOrCreate;

  final _i2.ProjectUpsertWithoutTimeEntriesInput? upsert;

  final _i2.ProjectWhereUniqueInput? connect;

  final _i1.PrismaUnion<
      _i2.ProjectUpdateToOneWithWhereWithoutTimeEntriesInput,
      _i1.PrismaUnion<_i2.ProjectUpdateWithoutTimeEntriesInput,
          _i2.ProjectUncheckedUpdateWithoutTimeEntriesInput>>? update;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'connect': connect,
        'update': update,
      };
}

class TimeEntryUpdateWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateWithoutUserInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.createdAt,
    this.updatedAt,
    this.project,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.ProjectUpdateOneRequiredWithoutTimeEntriesNestedInput? project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class TimeEntryUpsertWithWhereUniqueWithoutUserInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpsertWithWhereUniqueWithoutUserInput({
    required this.where,
    required this.update,
    required this.create,
  });

  final _i2.TimeEntryWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithoutUserInput,
      _i2.TimeEntryUncheckedUpdateWithoutUserInput> update;

  final _i1.PrismaUnion<_i2.TimeEntryCreateWithoutUserInput,
      _i2.TimeEntryUncheckedCreateWithoutUserInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'update': update,
        'create': create,
      };
}

class TimeEntryUpdateManyWithoutUserNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateManyWithoutUserNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.createMany,
    this.set,
    this.disconnect,
    this.delete,
    this.connect,
    this.update,
    this.updateMany,
    this.deleteMany,
  });

  final _i1.PrismaUnion<
      _i2.TimeEntryCreateWithoutUserInput,
      _i1.PrismaUnion<
          Iterable<_i2.TimeEntryCreateWithoutUserInput>,
          _i1.PrismaUnion<_i2.TimeEntryUncheckedCreateWithoutUserInput,
              Iterable<_i2.TimeEntryUncheckedCreateWithoutUserInput>>>>? create;

  final _i1.PrismaUnion<_i2.TimeEntryCreateOrConnectWithoutUserInput,
      Iterable<_i2.TimeEntryCreateOrConnectWithoutUserInput>>? connectOrCreate;

  final _i1.PrismaUnion<_i2.TimeEntryUpsertWithWhereUniqueWithoutUserInput,
      Iterable<_i2.TimeEntryUpsertWithWhereUniqueWithoutUserInput>>? upsert;

  final _i2.TimeEntryCreateManyUserInputEnvelope? createMany;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? set;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? disconnect;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? delete;

  final _i1.PrismaUnion<_i2.TimeEntryWhereUniqueInput,
      Iterable<_i2.TimeEntryWhereUniqueInput>>? connect;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateWithWhereUniqueWithoutUserInput,
      Iterable<_i2.TimeEntryUpdateWithWhereUniqueWithoutUserInput>>? update;

  final _i1.PrismaUnion<_i2.TimeEntryUpdateManyWithWhereWithoutUserInput,
      Iterable<_i2.TimeEntryUpdateManyWithWhereWithoutUserInput>>? updateMany;

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereInput,
      Iterable<_i2.TimeEntryScalarWhereInput>>? deleteMany;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'createMany': createMany,
        'set': set,
        'disconnect': disconnect,
        'delete': delete,
        'connect': connect,
        'update': update,
        'updateMany': updateMany,
        'deleteMany': deleteMany,
      };
}

class UserUpdateInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.ProjectUpdateManyWithoutUserNestedInput? projects;

  final _i2.TimeEntryUpdateManyWithoutUserNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class UserUncheckedUpdateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUncheckedUpdateInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.projects,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.ProjectUncheckedUpdateManyWithoutUserNestedInput? projects;

  final _i2.TimeEntryUncheckedUpdateManyWithoutUserNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'projects': projects,
        'timeEntries': timeEntries,
      };
}

class UserUpdateManyMutationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUpdateManyMutationInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserUncheckedUpdateManyInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserUncheckedUpdateManyInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? email;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? password;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserCountAggregateOutputType {
  const UserCountAggregateOutputType({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  factory UserCountAggregateOutputType.fromJson(Map json) =>
      UserCountAggregateOutputType(
        id: json['id'],
        name: json['name'],
        email: json['email'],
        password: json['password'],
        createdAt: json['createdAt'],
        updatedAt: json['updatedAt'],
        $all: json['_all'],
      );

  final int? id;

  final int? name;

  final int? email;

  final int? password;

  final int? createdAt;

  final int? updatedAt;

  final int? $all;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class UserMinAggregateOutputType {
  const UserMinAggregateOutputType({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  factory UserMinAggregateOutputType.fromJson(Map json) =>
      UserMinAggregateOutputType(
        id: json['id'],
        name: json['name'],
        email: json['email'],
        password: json['password'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final String? name;

  final String? email;

  final String? password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class UserMaxAggregateOutputType {
  const UserMaxAggregateOutputType({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  factory UserMaxAggregateOutputType.fromJson(Map json) =>
      UserMaxAggregateOutputType(
        id: json['id'],
        name: json['name'],
        email: json['email'],
        password: json['password'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final String? name;

  final String? email;

  final String? password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class UserGroupByOutputType {
  const UserGroupByOutputType({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  factory UserGroupByOutputType.fromJson(Map json) => UserGroupByOutputType(
        id: json['id'],
        name: json['name'],
        email: json['email'],
        password: json['password'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
        $count: json['_count'] is Map
            ? _i2.UserCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.UserMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.UserMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final String? id;

  final String? name;

  final String? email;

  final String? password;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.UserCountAggregateOutputType? $count;

  final _i2.UserMinAggregateOutputType? $min;

  final _i2.UserMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class UserCountOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCountOrderByAggregateInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? email;

  final _i2.SortOrder? password;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserMaxOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserMaxOrderByAggregateInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? email;

  final _i2.SortOrder? password;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserMinOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserMinOrderByAggregateInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? email;

  final _i2.SortOrder? password;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserOrderByWithAggregationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserOrderByWithAggregationInput({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$max,
    this.$min,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? email;

  final _i2.SortOrder? password;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.UserCountOrderByAggregateInput? $count;

  final _i2.UserMaxOrderByAggregateInput? $max;

  final _i2.UserMinOrderByAggregateInput? $min;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_max': $max,
        '_min': $min,
      };
}

class NestedIntFilter implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedIntFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.not,
  });

  final _i1.PrismaUnion<int, _i1.Reference<int>>? equals;

  final _i1.PrismaUnion<Iterable<int>, _i1.Reference<Iterable<int>>>? $in;

  final _i1.PrismaUnion<Iterable<int>, _i1.Reference<Iterable<int>>>? notIn;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? lt;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? lte;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? gt;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? gte;

  final _i1.PrismaUnion<int, _i2.NestedIntFilter>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'not': not,
      };
}

class NestedStringWithAggregatesFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedStringWithAggregatesFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.not,
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<String, _i1.Reference<String>>? equals;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>? $in;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>?
      notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i1.PrismaUnion<String, _i2.NestedStringWithAggregatesFilter>? not;

  final _i2.NestedIntFilter? $count;

  final _i2.NestedStringFilter? $min;

  final _i2.NestedStringFilter? $max;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'not': not,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class StringWithAggregatesFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const StringWithAggregatesFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.mode,
    this.not,
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<String, _i1.Reference<String>>? equals;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>? $in;

  final _i1.PrismaUnion<Iterable<String>, _i1.Reference<Iterable<String>>>?
      notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i2.QueryMode? mode;

  final _i1.PrismaUnion<String, _i2.NestedStringWithAggregatesFilter>? not;

  final _i2.NestedIntFilter? $count;

  final _i2.NestedStringFilter? $min;

  final _i2.NestedStringFilter? $max;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'mode': mode,
        'not': not,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class NestedDateTimeWithAggregatesFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedDateTimeWithAggregatesFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.not,
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? equals;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      $in;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      notIn;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lte;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gte;

  final _i1.PrismaUnion<DateTime, _i2.NestedDateTimeWithAggregatesFilter>? not;

  final _i2.NestedIntFilter? $count;

  final _i2.NestedDateTimeFilter? $min;

  final _i2.NestedDateTimeFilter? $max;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'not': not,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class DateTimeWithAggregatesFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const DateTimeWithAggregatesFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.not,
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? equals;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      $in;

  final _i1.PrismaUnion<Iterable<DateTime>, _i1.Reference<Iterable<DateTime>>>?
      notIn;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? lte;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gt;

  final _i1.PrismaUnion<DateTime, _i1.Reference<DateTime>>? gte;

  final _i1.PrismaUnion<DateTime, _i2.NestedDateTimeWithAggregatesFilter>? not;

  final _i2.NestedIntFilter? $count;

  final _i2.NestedDateTimeFilter? $min;

  final _i2.NestedDateTimeFilter? $max;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'not': not,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class UserScalarWhereWithAggregatesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserScalarWhereWithAggregatesInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<_i2.UserScalarWhereWithAggregatesInput,
      Iterable<_i2.UserScalarWhereWithAggregatesInput>>? AND;

  final Iterable<_i2.UserScalarWhereWithAggregatesInput>? OR;

  final _i1.PrismaUnion<_i2.UserScalarWhereWithAggregatesInput,
      Iterable<_i2.UserScalarWhereWithAggregatesInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? email;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? password;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserCountAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserCountAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  final bool? id;

  final bool? name;

  final bool? email;

  final bool? password;

  final bool? createdAt;

  final bool? updatedAt;

  final bool? $all;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class UserGroupByOutputTypeCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserGroupByOutputTypeCountArgs({this.select});

  final _i2.UserCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class UserMinAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserMinAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? name;

  final bool? email;

  final bool? password;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserGroupByOutputTypeMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserGroupByOutputTypeMinArgs({this.select});

  final _i2.UserMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class UserMaxAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserMaxAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? name;

  final bool? email;

  final bool? password;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class UserGroupByOutputTypeMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserGroupByOutputTypeMaxArgs({this.select});

  final _i2.UserMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class UserGroupByOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const UserGroupByOutputTypeSelect({
    this.id,
    this.name,
    this.email,
    this.password,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  final bool? id;

  final bool? name;

  final bool? email;

  final bool? password;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.UserGroupByOutputTypeCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.UserGroupByOutputTypeMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.UserGroupByOutputTypeMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'email': email,
        'password': password,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class AggregateUser {
  const AggregateUser({
    this.$count,
    this.$min,
    this.$max,
  });

  factory AggregateUser.fromJson(Map json) => AggregateUser(
        $count: json['_count'] is Map
            ? _i2.UserCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.UserMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.UserMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final _i2.UserCountAggregateOutputType? $count;

  final _i2.UserMinAggregateOutputType? $min;

  final _i2.UserMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class AggregateUserCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateUserCountArgs({this.select});

  final _i2.UserCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateUserMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateUserMinArgs({this.select});

  final _i2.UserMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateUserMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateUserMaxArgs({this.select});

  final _i2.UserMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateUserSelect implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateUserSelect({
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<bool, _i2.AggregateUserCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.AggregateUserMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.AggregateUserMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class ProjectCreateInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
    required this.user,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TaskCreateNestedManyWithoutProjectInput? tasks;

  final _i2.TimeEntryCreateNestedManyWithoutProjectInput? timeEntries;

  final _i2.UserCreateNestedOneWithoutProjectsInput user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
        'user': user,
      };
}

class ProjectUncheckedCreateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedCreateInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    required this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final String userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TaskUncheckedCreateNestedManyWithoutProjectInput? tasks;

  final _i2.TimeEntryUncheckedCreateNestedManyWithoutProjectInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class ProjectCreateManyInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateManyInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    required this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final String userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class CreateManyProjectAndReturnOutputTypeUserArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyProjectAndReturnOutputTypeUserArgs({
    this.select,
    this.include,
  });

  final _i2.UserSelect? select;

  final _i2.UserInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class CreateManyProjectAndReturnOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyProjectAndReturnOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.user,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? clientId;

  final bool? userId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.CreateManyProjectAndReturnOutputTypeUserArgs>?
      user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
      };
}

class CreateManyProjectAndReturnOutputTypeInclude
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyProjectAndReturnOutputTypeInclude({this.user});

  final _i1.PrismaUnion<bool, _i2.CreateManyProjectAndReturnOutputTypeUserArgs>?
      user;

  @override
  Map<String, dynamic> toJson() => {'user': user};
}

class ProjectUpdateInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
    this.user,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TaskUpdateManyWithoutProjectNestedInput? tasks;

  final _i2.TimeEntryUpdateManyWithoutProjectNestedInput? timeEntries;

  final _i2.UserUpdateOneRequiredWithoutProjectsNestedInput? user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
        'user': user,
      };
}

class ProjectUncheckedUpdateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedUpdateInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.tasks,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TaskUncheckedUpdateManyWithoutProjectNestedInput? tasks;

  final _i2.TimeEntryUncheckedUpdateManyWithoutProjectNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'tasks': tasks,
        'timeEntries': timeEntries,
      };
}

class ProjectUncheckedUpdateManyInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedUpdateManyInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectCountAggregateOutputType {
  const ProjectCountAggregateOutputType({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  factory ProjectCountAggregateOutputType.fromJson(Map json) =>
      ProjectCountAggregateOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        clientId: json['clientId'],
        userId: json['userId'],
        createdAt: json['createdAt'],
        updatedAt: json['updatedAt'],
        $all: json['_all'],
      );

  final int? id;

  final int? name;

  final int? description;

  final int? clientId;

  final int? userId;

  final int? createdAt;

  final int? updatedAt;

  final int? $all;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class ProjectMinAggregateOutputType {
  const ProjectMinAggregateOutputType({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  factory ProjectMinAggregateOutputType.fromJson(Map json) =>
      ProjectMinAggregateOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        clientId: json['clientId'],
        userId: json['userId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final String? name;

  final String? description;

  final String? clientId;

  final String? userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class ProjectMaxAggregateOutputType {
  const ProjectMaxAggregateOutputType({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  factory ProjectMaxAggregateOutputType.fromJson(Map json) =>
      ProjectMaxAggregateOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        clientId: json['clientId'],
        userId: json['userId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final String? name;

  final String? description;

  final String? clientId;

  final String? userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class ProjectGroupByOutputType {
  const ProjectGroupByOutputType({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  factory ProjectGroupByOutputType.fromJson(Map json) =>
      ProjectGroupByOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        clientId: json['clientId'],
        userId: json['userId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
        $count: json['_count'] is Map
            ? _i2.ProjectCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.ProjectMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.ProjectMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final String? id;

  final String? name;

  final String? description;

  final String? clientId;

  final String? userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.ProjectCountAggregateOutputType? $count;

  final _i2.ProjectMinAggregateOutputType? $min;

  final _i2.ProjectMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class ProjectCountOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCountOrderByAggregateInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? description;

  final _i2.SortOrder? clientId;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectMaxOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectMaxOrderByAggregateInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? description;

  final _i2.SortOrder? clientId;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectMinOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectMinOrderByAggregateInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? description;

  final _i2.SortOrder? clientId;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectOrderByWithAggregationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectOrderByWithAggregationInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$max,
    this.$min,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? description;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? clientId;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.ProjectCountOrderByAggregateInput? $count;

  final _i2.ProjectMaxOrderByAggregateInput? $max;

  final _i2.ProjectMinOrderByAggregateInput? $min;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_max': $max,
        '_min': $min,
      };
}

class NestedIntNullableFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedIntNullableFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.not,
  });

  final _i1
      .PrismaUnion<int, _i1.PrismaUnion<_i1.Reference<int>, _i1.PrismaNull>>?
      equals;

  final _i1.PrismaUnion<Iterable<int>,
      _i1.PrismaUnion<_i1.Reference<Iterable<int>>, _i1.PrismaNull>>? $in;

  final _i1.PrismaUnion<Iterable<int>,
      _i1.PrismaUnion<_i1.Reference<Iterable<int>>, _i1.PrismaNull>>? notIn;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? lt;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? lte;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? gt;

  final _i1.PrismaUnion<int, _i1.Reference<int>>? gte;

  final _i1.PrismaUnion<int,
      _i1.PrismaUnion<_i2.NestedIntNullableFilter, _i1.PrismaNull>>? not;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'not': not,
      };
}

class NestedStringNullableWithAggregatesFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const NestedStringNullableWithAggregatesFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.not,
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<String,
      _i1.PrismaUnion<_i1.Reference<String>, _i1.PrismaNull>>? equals;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? $in;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NestedStringNullableWithAggregatesFilter,
          _i1.PrismaNull>>? not;

  final _i2.NestedIntNullableFilter? $count;

  final _i2.NestedStringNullableFilter? $min;

  final _i2.NestedStringNullableFilter? $max;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'not': not,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class StringNullableWithAggregatesFilter
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const StringNullableWithAggregatesFilter({
    this.equals,
    this.$in,
    this.notIn,
    this.lt,
    this.lte,
    this.gt,
    this.gte,
    this.contains,
    this.startsWith,
    this.endsWith,
    this.mode,
    this.not,
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<String,
      _i1.PrismaUnion<_i1.Reference<String>, _i1.PrismaNull>>? equals;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? $in;

  final _i1.PrismaUnion<Iterable<String>,
      _i1.PrismaUnion<_i1.Reference<Iterable<String>>, _i1.PrismaNull>>? notIn;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? lte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gt;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? gte;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? contains;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? startsWith;

  final _i1.PrismaUnion<String, _i1.Reference<String>>? endsWith;

  final _i2.QueryMode? mode;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NestedStringNullableWithAggregatesFilter,
          _i1.PrismaNull>>? not;

  final _i2.NestedIntNullableFilter? $count;

  final _i2.NestedStringNullableFilter? $min;

  final _i2.NestedStringNullableFilter? $max;

  @override
  Map<String, dynamic> toJson() => {
        'equals': equals,
        'in': $in,
        'notIn': notIn,
        'lt': lt,
        'lte': lte,
        'gt': gt,
        'gte': gte,
        'contains': contains,
        'startsWith': startsWith,
        'endsWith': endsWith,
        'mode': mode,
        'not': not,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class ProjectScalarWhereWithAggregatesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectScalarWhereWithAggregatesInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<_i2.ProjectScalarWhereWithAggregatesInput,
      Iterable<_i2.ProjectScalarWhereWithAggregatesInput>>? AND;

  final Iterable<_i2.ProjectScalarWhereWithAggregatesInput>? OR;

  final _i1.PrismaUnion<_i2.ProjectScalarWhereWithAggregatesInput,
      Iterable<_i2.ProjectScalarWhereWithAggregatesInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableWithAggregatesFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringNullableWithAggregatesFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? userId;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectCountAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCountAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? clientId;

  final bool? userId;

  final bool? createdAt;

  final bool? updatedAt;

  final bool? $all;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class ProjectGroupByOutputTypeCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectGroupByOutputTypeCountArgs({this.select});

  final _i2.ProjectCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class ProjectMinAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectMinAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? clientId;

  final bool? userId;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectGroupByOutputTypeMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectGroupByOutputTypeMinArgs({this.select});

  final _i2.ProjectMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class ProjectMaxAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectMaxAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? clientId;

  final bool? userId;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class ProjectGroupByOutputTypeMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectGroupByOutputTypeMaxArgs({this.select});

  final _i2.ProjectMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class ProjectGroupByOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectGroupByOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? clientId;

  final bool? userId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.ProjectGroupByOutputTypeCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.ProjectGroupByOutputTypeMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.ProjectGroupByOutputTypeMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class AggregateProject {
  const AggregateProject({
    this.$count,
    this.$min,
    this.$max,
  });

  factory AggregateProject.fromJson(Map json) => AggregateProject(
        $count: json['_count'] is Map
            ? _i2.ProjectCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.ProjectMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.ProjectMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final _i2.ProjectCountAggregateOutputType? $count;

  final _i2.ProjectMinAggregateOutputType? $min;

  final _i2.ProjectMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class AggregateProjectCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateProjectCountArgs({this.select});

  final _i2.ProjectCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateProjectMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateProjectMinArgs({this.select});

  final _i2.ProjectMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateProjectMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateProjectMaxArgs({this.select});

  final _i2.ProjectMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateProjectSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateProjectSelect({
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<bool, _i2.AggregateProjectCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.AggregateProjectMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.AggregateProjectMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class TimeEntryCreateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    this.createdAt,
    this.updatedAt,
    required this.user,
    required this.project,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.UserCreateNestedOneWithoutTimeEntriesInput user;

  final _i2.ProjectCreateNestedOneWithoutTimeEntriesInput project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
        'project': project,
      };
}

class TimeEntryUncheckedCreateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedCreateInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    required this.userId,
    required this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String userId;

  final String projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryCreateManyInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCreateManyInput({
    this.id,
    required this.startTime,
    required this.endTime,
    this.description,
    required this.userId,
    required this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final DateTime startTime;

  final DateTime endTime;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String userId;

  final String projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class CreateManyTimeEntryAndReturnOutputTypeUserArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyTimeEntryAndReturnOutputTypeUserArgs({
    this.select,
    this.include,
  });

  final _i2.UserSelect? select;

  final _i2.UserInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class CreateManyTimeEntryAndReturnOutputTypeProjectArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyTimeEntryAndReturnOutputTypeProjectArgs({
    this.select,
    this.include,
  });

  final _i2.ProjectSelect? select;

  final _i2.ProjectInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class CreateManyTimeEntryAndReturnOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyTimeEntryAndReturnOutputTypeSelect({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.user,
    this.project,
  });

  final bool? id;

  final bool? startTime;

  final bool? endTime;

  final bool? description;

  final bool? userId;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1
      .PrismaUnion<bool, _i2.CreateManyTimeEntryAndReturnOutputTypeUserArgs>?
      user;

  final _i1
      .PrismaUnion<bool, _i2.CreateManyTimeEntryAndReturnOutputTypeProjectArgs>?
      project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
        'project': project,
      };
}

class CreateManyTimeEntryAndReturnOutputTypeInclude
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyTimeEntryAndReturnOutputTypeInclude({
    this.user,
    this.project,
  });

  final _i1
      .PrismaUnion<bool, _i2.CreateManyTimeEntryAndReturnOutputTypeUserArgs>?
      user;

  final _i1
      .PrismaUnion<bool, _i2.CreateManyTimeEntryAndReturnOutputTypeProjectArgs>?
      project;

  @override
  Map<String, dynamic> toJson() => {
        'user': user,
        'project': project,
      };
}

class TimeEntryUpdateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUpdateInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.createdAt,
    this.updatedAt,
    this.user,
    this.project,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.UserUpdateOneRequiredWithoutTimeEntriesNestedInput? user;

  final _i2.ProjectUpdateOneRequiredWithoutTimeEntriesNestedInput? project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'user': user,
        'project': project,
      };
}

class TimeEntryUncheckedUpdateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>?
      projectId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryUncheckedUpdateManyInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryUncheckedUpdateManyInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      startTime;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      endTime;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>?
      projectId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryCountAggregateOutputType {
  const TimeEntryCountAggregateOutputType({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  factory TimeEntryCountAggregateOutputType.fromJson(Map json) =>
      TimeEntryCountAggregateOutputType(
        id: json['id'],
        startTime: json['startTime'],
        endTime: json['endTime'],
        description: json['description'],
        userId: json['userId'],
        projectId: json['projectId'],
        createdAt: json['createdAt'],
        updatedAt: json['updatedAt'],
        $all: json['_all'],
      );

  final int? id;

  final int? startTime;

  final int? endTime;

  final int? description;

  final int? userId;

  final int? projectId;

  final int? createdAt;

  final int? updatedAt;

  final int? $all;

  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class TimeEntryMinAggregateOutputType {
  const TimeEntryMinAggregateOutputType({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  factory TimeEntryMinAggregateOutputType.fromJson(Map json) =>
      TimeEntryMinAggregateOutputType(
        id: json['id'],
        startTime: switch (json['startTime']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['startTime']
        },
        endTime: switch (json['endTime']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['endTime']
        },
        description: json['description'],
        userId: json['userId'],
        projectId: json['projectId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final DateTime? startTime;

  final DateTime? endTime;

  final String? description;

  final String? userId;

  final String? projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime?.toIso8601String(),
        'endTime': endTime?.toIso8601String(),
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class TimeEntryMaxAggregateOutputType {
  const TimeEntryMaxAggregateOutputType({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  factory TimeEntryMaxAggregateOutputType.fromJson(Map json) =>
      TimeEntryMaxAggregateOutputType(
        id: json['id'],
        startTime: switch (json['startTime']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['startTime']
        },
        endTime: switch (json['endTime']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['endTime']
        },
        description: json['description'],
        userId: json['userId'],
        projectId: json['projectId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final DateTime? startTime;

  final DateTime? endTime;

  final String? description;

  final String? userId;

  final String? projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime?.toIso8601String(),
        'endTime': endTime?.toIso8601String(),
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class TimeEntryGroupByOutputType {
  const TimeEntryGroupByOutputType({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  factory TimeEntryGroupByOutputType.fromJson(Map json) =>
      TimeEntryGroupByOutputType(
        id: json['id'],
        startTime: switch (json['startTime']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['startTime']
        },
        endTime: switch (json['endTime']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['endTime']
        },
        description: json['description'],
        userId: json['userId'],
        projectId: json['projectId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
        $count: json['_count'] is Map
            ? _i2.TimeEntryCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.TimeEntryMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.TimeEntryMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final String? id;

  final DateTime? startTime;

  final DateTime? endTime;

  final String? description;

  final String? userId;

  final String? projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TimeEntryCountAggregateOutputType? $count;

  final _i2.TimeEntryMinAggregateOutputType? $min;

  final _i2.TimeEntryMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime?.toIso8601String(),
        'endTime': endTime?.toIso8601String(),
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class TimeEntryCountOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCountOrderByAggregateInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? startTime;

  final _i2.SortOrder? endTime;

  final _i2.SortOrder? description;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryMaxOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryMaxOrderByAggregateInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? startTime;

  final _i2.SortOrder? endTime;

  final _i2.SortOrder? description;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryMinOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryMinOrderByAggregateInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? startTime;

  final _i2.SortOrder? endTime;

  final _i2.SortOrder? description;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryOrderByWithAggregationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryOrderByWithAggregationInput({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$max,
    this.$min,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? startTime;

  final _i2.SortOrder? endTime;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? description;

  final _i2.SortOrder? userId;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.TimeEntryCountOrderByAggregateInput? $count;

  final _i2.TimeEntryMaxOrderByAggregateInput? $max;

  final _i2.TimeEntryMinOrderByAggregateInput? $min;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_max': $max,
        '_min': $min,
      };
}

class TimeEntryScalarWhereWithAggregatesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryScalarWhereWithAggregatesInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereWithAggregatesInput,
      Iterable<_i2.TimeEntryScalarWhereWithAggregatesInput>>? AND;

  final Iterable<_i2.TimeEntryScalarWhereWithAggregatesInput>? OR;

  final _i1.PrismaUnion<_i2.TimeEntryScalarWhereWithAggregatesInput,
      Iterable<_i2.TimeEntryScalarWhereWithAggregatesInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? id;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? startTime;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? endTime;

  final _i1.PrismaUnion<_i2.StringNullableWithAggregatesFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? userId;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryCountAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryCountAggregateOutputTypeSelect({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  final bool? id;

  final bool? startTime;

  final bool? endTime;

  final bool? description;

  final bool? userId;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final bool? $all;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class TimeEntryGroupByOutputTypeCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryGroupByOutputTypeCountArgs({this.select});

  final _i2.TimeEntryCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class TimeEntryMinAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryMinAggregateOutputTypeSelect({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? startTime;

  final bool? endTime;

  final bool? description;

  final bool? userId;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryGroupByOutputTypeMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryGroupByOutputTypeMinArgs({this.select});

  final _i2.TimeEntryMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class TimeEntryMaxAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryMaxAggregateOutputTypeSelect({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? startTime;

  final bool? endTime;

  final bool? description;

  final bool? userId;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TimeEntryGroupByOutputTypeMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryGroupByOutputTypeMaxArgs({this.select});

  final _i2.TimeEntryMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class TimeEntryGroupByOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TimeEntryGroupByOutputTypeSelect({
    this.id,
    this.startTime,
    this.endTime,
    this.description,
    this.userId,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  final bool? id;

  final bool? startTime;

  final bool? endTime;

  final bool? description;

  final bool? userId;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.TimeEntryGroupByOutputTypeCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.TimeEntryGroupByOutputTypeMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.TimeEntryGroupByOutputTypeMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'startTime': startTime,
        'endTime': endTime,
        'description': description,
        'userId': userId,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class AggregateTimeEntry {
  const AggregateTimeEntry({
    this.$count,
    this.$min,
    this.$max,
  });

  factory AggregateTimeEntry.fromJson(Map json) => AggregateTimeEntry(
        $count: json['_count'] is Map
            ? _i2.TimeEntryCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.TimeEntryMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.TimeEntryMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final _i2.TimeEntryCountAggregateOutputType? $count;

  final _i2.TimeEntryMinAggregateOutputType? $min;

  final _i2.TimeEntryMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class AggregateTimeEntryCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTimeEntryCountArgs({this.select});

  final _i2.TimeEntryCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateTimeEntryMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTimeEntryMinArgs({this.select});

  final _i2.TimeEntryMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateTimeEntryMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTimeEntryMaxArgs({this.select});

  final _i2.TimeEntryMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateTimeEntrySelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTimeEntrySelect({
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<bool, _i2.AggregateTimeEntryCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.AggregateTimeEntryMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.AggregateTimeEntryMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class ProjectCreateWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateWithoutTasksInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
    required this.user,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TimeEntryCreateNestedManyWithoutProjectInput? timeEntries;

  final _i2.UserCreateNestedOneWithoutProjectsInput user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
        'user': user,
      };
}

class ProjectUncheckedCreateWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedCreateWithoutTasksInput({
    this.id,
    required this.name,
    this.description,
    this.clientId,
    required this.userId,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? clientId;

  final String userId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TimeEntryUncheckedCreateNestedManyWithoutProjectInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
      };
}

class ProjectCreateOrConnectWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateOrConnectWithoutTasksInput({
    required this.where,
    required this.create,
  });

  final _i2.ProjectWhereUniqueInput where;

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTasksInput,
      _i2.ProjectUncheckedCreateWithoutTasksInput> create;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'create': create,
      };
}

class ProjectCreateNestedOneWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectCreateNestedOneWithoutTasksInput({
    this.create,
    this.connectOrCreate,
    this.connect,
  });

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTasksInput,
      _i2.ProjectUncheckedCreateWithoutTasksInput>? create;

  final _i2.ProjectCreateOrConnectWithoutTasksInput? connectOrCreate;

  final _i2.ProjectWhereUniqueInput? connect;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'connect': connect,
      };
}

class TaskCreateInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCreateInput({
    this.id,
    required this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
    required this.project,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.ProjectCreateNestedOneWithoutTasksInput project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class TaskUncheckedCreateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedCreateInput({
    this.id,
    required this.name,
    this.description,
    required this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskCreateManyInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCreateManyInput({
    this.id,
    required this.name,
    this.description,
    required this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final String? id;

  final String name;

  final _i1.PrismaUnion<String, _i1.PrismaNull>? description;

  final String projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class CreateManyTaskAndReturnOutputTypeProjectArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyTaskAndReturnOutputTypeProjectArgs({
    this.select,
    this.include,
  });

  final _i2.ProjectSelect? select;

  final _i2.ProjectInclude? include;

  @override
  Map<String, dynamic> toJson() => {
        'select': select,
        'include': include,
      };
}

class CreateManyTaskAndReturnOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyTaskAndReturnOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.project,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.CreateManyTaskAndReturnOutputTypeProjectArgs>?
      project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class CreateManyTaskAndReturnOutputTypeInclude
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const CreateManyTaskAndReturnOutputTypeInclude({this.project});

  final _i1.PrismaUnion<bool, _i2.CreateManyTaskAndReturnOutputTypeProjectArgs>?
      project;

  @override
  Map<String, dynamic> toJson() => {'project': project};
}

class ProjectUpdateWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateWithoutTasksInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
    this.user,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TimeEntryUpdateManyWithoutProjectNestedInput? timeEntries;

  final _i2.UserUpdateOneRequiredWithoutProjectsNestedInput? user;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
        'user': user,
      };
}

class ProjectUncheckedUpdateWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUncheckedUpdateWithoutTasksInput({
    this.id,
    this.name,
    this.description,
    this.clientId,
    this.userId,
    this.createdAt,
    this.updatedAt,
    this.timeEntries,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? clientId;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? userId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.TimeEntryUncheckedUpdateManyWithoutProjectNestedInput? timeEntries;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'clientId': clientId,
        'userId': userId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'timeEntries': timeEntries,
      };
}

class ProjectUpsertWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpsertWithoutTasksInput({
    required this.update,
    required this.create,
    this.where,
  });

  final _i1.PrismaUnion<_i2.ProjectUpdateWithoutTasksInput,
      _i2.ProjectUncheckedUpdateWithoutTasksInput> update;

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTasksInput,
      _i2.ProjectUncheckedCreateWithoutTasksInput> create;

  final _i2.ProjectWhereInput? where;

  @override
  Map<String, dynamic> toJson() => {
        'update': update,
        'create': create,
        'where': where,
      };
}

class ProjectUpdateToOneWithWhereWithoutTasksInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateToOneWithWhereWithoutTasksInput({
    this.where,
    required this.data,
  });

  final _i2.ProjectWhereInput? where;

  final _i1.PrismaUnion<_i2.ProjectUpdateWithoutTasksInput,
      _i2.ProjectUncheckedUpdateWithoutTasksInput> data;

  @override
  Map<String, dynamic> toJson() => {
        'where': where,
        'data': data,
      };
}

class ProjectUpdateOneRequiredWithoutTasksNestedInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const ProjectUpdateOneRequiredWithoutTasksNestedInput({
    this.create,
    this.connectOrCreate,
    this.upsert,
    this.connect,
    this.update,
  });

  final _i1.PrismaUnion<_i2.ProjectCreateWithoutTasksInput,
      _i2.ProjectUncheckedCreateWithoutTasksInput>? create;

  final _i2.ProjectCreateOrConnectWithoutTasksInput? connectOrCreate;

  final _i2.ProjectUpsertWithoutTasksInput? upsert;

  final _i2.ProjectWhereUniqueInput? connect;

  final _i1.PrismaUnion<
      _i2.ProjectUpdateToOneWithWhereWithoutTasksInput,
      _i1.PrismaUnion<_i2.ProjectUpdateWithoutTasksInput,
          _i2.ProjectUncheckedUpdateWithoutTasksInput>>? update;

  @override
  Map<String, dynamic> toJson() => {
        'create': create,
        'connectOrCreate': connectOrCreate,
        'upsert': upsert,
        'connect': connect,
        'update': update,
      };
}

class TaskUpdateInput implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUpdateInput({
    this.id,
    this.name,
    this.description,
    this.createdAt,
    this.updatedAt,
    this.project,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  final _i2.ProjectUpdateOneRequiredWithoutTasksNestedInput? project;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        'project': project,
      };
}

class TaskUncheckedUpdateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedUpdateInput({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>?
      projectId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskUncheckedUpdateManyInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskUncheckedUpdateManyInput({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? id;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>? name;

  final _i1.PrismaUnion<
      String,
      _i1.PrismaUnion<_i2.NullableStringFieldUpdateOperationsInput,
          _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<String, _i2.StringFieldUpdateOperationsInput>?
      projectId;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      createdAt;

  final _i1.PrismaUnion<DateTime, _i2.DateTimeFieldUpdateOperationsInput>?
      updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskCountAggregateOutputType {
  const TaskCountAggregateOutputType({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  factory TaskCountAggregateOutputType.fromJson(Map json) =>
      TaskCountAggregateOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        projectId: json['projectId'],
        createdAt: json['createdAt'],
        updatedAt: json['updatedAt'],
        $all: json['_all'],
      );

  final int? id;

  final int? name;

  final int? description;

  final int? projectId;

  final int? createdAt;

  final int? updatedAt;

  final int? $all;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class TaskMinAggregateOutputType {
  const TaskMinAggregateOutputType({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  factory TaskMinAggregateOutputType.fromJson(Map json) =>
      TaskMinAggregateOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        projectId: json['projectId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final String? name;

  final String? description;

  final String? projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class TaskMaxAggregateOutputType {
  const TaskMaxAggregateOutputType({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  factory TaskMaxAggregateOutputType.fromJson(Map json) =>
      TaskMaxAggregateOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        projectId: json['projectId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
      );

  final String? id;

  final String? name;

  final String? description;

  final String? projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
      };
}

class TaskGroupByOutputType {
  const TaskGroupByOutputType({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  factory TaskGroupByOutputType.fromJson(Map json) => TaskGroupByOutputType(
        id: json['id'],
        name: json['name'],
        description: json['description'],
        projectId: json['projectId'],
        createdAt: switch (json['createdAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['createdAt']
        },
        updatedAt: switch (json['updatedAt']) {
          DateTime value => value,
          String value => DateTime.parse(value),
          _ => json['updatedAt']
        },
        $count: json['_count'] is Map
            ? _i2.TaskCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.TaskMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.TaskMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final String? id;

  final String? name;

  final String? description;

  final String? projectId;

  final DateTime? createdAt;

  final DateTime? updatedAt;

  final _i2.TaskCountAggregateOutputType? $count;

  final _i2.TaskMinAggregateOutputType? $min;

  final _i2.TaskMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt?.toIso8601String(),
        'updatedAt': updatedAt?.toIso8601String(),
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class TaskCountOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCountOrderByAggregateInput({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? description;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskMaxOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskMaxOrderByAggregateInput({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? description;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskMinOrderByAggregateInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskMinOrderByAggregateInput({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i2.SortOrder? description;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskOrderByWithAggregationInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskOrderByWithAggregationInput({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$max,
    this.$min,
  });

  final _i2.SortOrder? id;

  final _i2.SortOrder? name;

  final _i1.PrismaUnion<_i2.SortOrder, _i2.SortOrderInput>? description;

  final _i2.SortOrder? projectId;

  final _i2.SortOrder? createdAt;

  final _i2.SortOrder? updatedAt;

  final _i2.TaskCountOrderByAggregateInput? $count;

  final _i2.TaskMaxOrderByAggregateInput? $max;

  final _i2.TaskMinOrderByAggregateInput? $min;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_max': $max,
        '_min': $min,
      };
}

class TaskScalarWhereWithAggregatesInput
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskScalarWhereWithAggregatesInput({
    this.AND,
    this.OR,
    this.NOT,
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final _i1.PrismaUnion<_i2.TaskScalarWhereWithAggregatesInput,
      Iterable<_i2.TaskScalarWhereWithAggregatesInput>>? AND;

  final Iterable<_i2.TaskScalarWhereWithAggregatesInput>? OR;

  final _i1.PrismaUnion<_i2.TaskScalarWhereWithAggregatesInput,
      Iterable<_i2.TaskScalarWhereWithAggregatesInput>>? NOT;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? id;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? name;

  final _i1.PrismaUnion<_i2.StringNullableWithAggregatesFilter,
      _i1.PrismaUnion<String, _i1.PrismaNull>>? description;

  final _i1.PrismaUnion<_i2.StringWithAggregatesFilter, String>? projectId;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? createdAt;

  final _i1.PrismaUnion<_i2.DateTimeWithAggregatesFilter, DateTime>? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'AND': AND,
        'OR': OR,
        'NOT': NOT,
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskCountAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskCountAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$all,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final bool? $all;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_all': $all,
      };
}

class TaskGroupByOutputTypeCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskGroupByOutputTypeCountArgs({this.select});

  final _i2.TaskCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class TaskMinAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskMinAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskGroupByOutputTypeMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskGroupByOutputTypeMinArgs({this.select});

  final _i2.TaskMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class TaskMaxAggregateOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskMaxAggregateOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
      };
}

class TaskGroupByOutputTypeMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskGroupByOutputTypeMaxArgs({this.select});

  final _i2.TaskMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class TaskGroupByOutputTypeSelect
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const TaskGroupByOutputTypeSelect({
    this.id,
    this.name,
    this.description,
    this.projectId,
    this.createdAt,
    this.updatedAt,
    this.$count,
    this.$min,
    this.$max,
  });

  final bool? id;

  final bool? name;

  final bool? description;

  final bool? projectId;

  final bool? createdAt;

  final bool? updatedAt;

  final _i1.PrismaUnion<bool, _i2.TaskGroupByOutputTypeCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.TaskGroupByOutputTypeMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.TaskGroupByOutputTypeMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'description': description,
        'projectId': projectId,
        'createdAt': createdAt,
        'updatedAt': updatedAt,
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}

class AggregateTask {
  const AggregateTask({
    this.$count,
    this.$min,
    this.$max,
  });

  factory AggregateTask.fromJson(Map json) => AggregateTask(
        $count: json['_count'] is Map
            ? _i2.TaskCountAggregateOutputType.fromJson(json['_count'])
            : null,
        $min: json['_min'] is Map
            ? _i2.TaskMinAggregateOutputType.fromJson(json['_min'])
            : null,
        $max: json['_max'] is Map
            ? _i2.TaskMaxAggregateOutputType.fromJson(json['_max'])
            : null,
      );

  final _i2.TaskCountAggregateOutputType? $count;

  final _i2.TaskMinAggregateOutputType? $min;

  final _i2.TaskMaxAggregateOutputType? $max;

  Map<String, dynamic> toJson() => {
        '_count': $count?.toJson(),
        '_min': $min?.toJson(),
        '_max': $max?.toJson(),
      };
}

class AggregateTaskCountArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTaskCountArgs({this.select});

  final _i2.TaskCountAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateTaskMinArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTaskMinArgs({this.select});

  final _i2.TaskMinAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateTaskMaxArgs
    implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTaskMaxArgs({this.select});

  final _i2.TaskMaxAggregateOutputTypeSelect? select;

  @override
  Map<String, dynamic> toJson() => {'select': select};
}

class AggregateTaskSelect implements _i1.JsonConvertible<Map<String, dynamic>> {
  const AggregateTaskSelect({
    this.$count,
    this.$min,
    this.$max,
  });

  final _i1.PrismaUnion<bool, _i2.AggregateTaskCountArgs>? $count;

  final _i1.PrismaUnion<bool, _i2.AggregateTaskMinArgs>? $min;

  final _i1.PrismaUnion<bool, _i2.AggregateTaskMaxArgs>? $max;

  @override
  Map<String, dynamic> toJson() => {
        '_count': $count,
        '_min': $min,
        '_max': $max,
      };
}
