// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.12.0.

// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import

import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
import 'package:localsend_isolates/rust/frb_generated.dart';

enum DeviceType {
  mobile,
  desktop,
  web,
  headless,
  server,
}

class FileDto {
  final String id;
  final String fileName;
  final BigInt size;
  final String fileType;
  final String? sha256;
  final String? preview;
  final FileMetadata? metadata;

  const FileDto({
    required this.id,
    required this.fileName,
    required this.size,
    required this.fileType,
    this.sha256,
    this.preview,
    this.metadata,
  });

  @override
  int get hashCode => id.hashCode ^ fileName.hashCode ^ size.hashCode ^ fileType.hashCode ^ sha256.hashCode ^ preview.hashCode ^ metadata.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is FileDto &&
          runtimeType == other.runtimeType &&
          id == other.id &&
          fileName == other.fileName &&
          size == other.size &&
          fileType == other.fileType &&
          sha256 == other.sha256 &&
          preview == other.preview &&
          metadata == other.metadata;
}

class FileMetadata {
  final String? modified;
  final String? accessed;

  const FileMetadata({
    this.modified,
    this.accessed,
  });

  @override
  int get hashCode => modified.hashCode ^ accessed.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) || other is FileMetadata && runtimeType == other.runtimeType && modified == other.modified && accessed == other.accessed;
}

class PrepareUploadRequestDto {
  final RegisterDto info;
  final Map<String, FileDto> files;

  const PrepareUploadRequestDto({
    required this.info,
    required this.files,
  });

  @override
  int get hashCode => info.hashCode ^ files.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) || other is PrepareUploadRequestDto && runtimeType == other.runtimeType && info == other.info && files == other.files;
}

class PrepareUploadResponseDto {
  final String sessionId;
  final Map<String, String> files;

  const PrepareUploadResponseDto({
    required this.sessionId,
    required this.files,
  });

  @override
  int get hashCode => sessionId.hashCode ^ files.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is PrepareUploadResponseDto && runtimeType == other.runtimeType && sessionId == other.sessionId && files == other.files;
}

enum ProtocolType {
  http,
  https,
}

class RegisterDto {
  final String alias;
  final String version;
  final String? deviceModel;
  final DeviceType? deviceType;
  final String token;
  final int port;
  final ProtocolType protocol;
  final bool hasWebInterface;

  const RegisterDto({
    required this.alias,
    required this.version,
    this.deviceModel,
    this.deviceType,
    required this.token,
    required this.port,
    required this.protocol,
    required this.hasWebInterface,
  });

  @override
  int get hashCode =>
      alias.hashCode ^
      version.hashCode ^
      deviceModel.hashCode ^
      deviceType.hashCode ^
      token.hashCode ^
      port.hashCode ^
      protocol.hashCode ^
      hasWebInterface.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is RegisterDto &&
          runtimeType == other.runtimeType &&
          alias == other.alias &&
          version == other.version &&
          deviceModel == other.deviceModel &&
          deviceType == other.deviceType &&
          token == other.token &&
          port == other.port &&
          protocol == other.protocol &&
          hasWebInterface == other.hasWebInterface;
}

class RegisterResponseDto {
  final String alias;
  final String version;
  final String? deviceModel;
  final DeviceType? deviceType;
  final String token;
  final bool hasWebInterface;

  const RegisterResponseDto({
    required this.alias,
    required this.version,
    this.deviceModel,
    this.deviceType,
    required this.token,
    required this.hasWebInterface,
  });

  @override
  int get hashCode => alias.hashCode ^ version.hashCode ^ deviceModel.hashCode ^ deviceType.hashCode ^ token.hashCode ^ hasWebInterface.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is RegisterResponseDto &&
          runtimeType == other.runtimeType &&
          alias == other.alias &&
          version == other.version &&
          deviceModel == other.deviceModel &&
          deviceType == other.deviceType &&
          token == other.token &&
          hasWebInterface == other.hasWebInterface;
}
