// GENERATED CODE - DO NOT MODIFY BY HAND

// ignore_for_file: always_specify_types, implicit_dynamic_parameter

part of 'token_info.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

TokenInfo _$TokenInfoFromJson(Map<String, dynamic> json) {
  return TokenInfo(
    issuer: json['iss'] as String,
    authorizedParty: json['azp'] as String,
    audience: json['aud'] as String,
    subject: json['sub'] as String,
    hostedDomain: json['hd'] as String,
    email: json['email'] as String,
    emailIsVerified:
        const BoolConverter().fromJson(json['email_verified'] as String),
    accessTokenHash: json['at_hash'] as String,
    fullName: json['name'] as String,
    profilePictureUrl: json['picture'] as String,
    givenName: json['given_name'] as String,
    familyName: json['family_name'] as String,
    locale: json['locale'] as String,
    issued: const SecondsSinceEpochConverter().fromJson(json['iat'] as String),
    expiration:
        const SecondsSinceEpochConverter().fromJson(json['exp'] as String),
    jwtId: json['jti'] as String,
    algorithm: json['alg'] as String,
    keyId: json['kid'] as String,
    encoding: json['typ'] as String,
  );
}

Map<String, dynamic> _$TokenInfoToJson(TokenInfo instance) => <String, dynamic>{
      'iss': instance.issuer,
      'azp': instance.authorizedParty,
      'aud': instance.audience,
      'sub': instance.subject,
      'hd': instance.hostedDomain,
      'email': instance.email,
      'email_verified': const BoolConverter().toJson(instance.emailIsVerified),
      'at_hash': instance.accessTokenHash,
      'name': instance.fullName,
      'picture': instance.profilePictureUrl,
      'given_name': instance.givenName,
      'family_name': instance.familyName,
      'locale': instance.locale,
      'iat': const SecondsSinceEpochConverter().toJson(instance.issued),
      'exp': const SecondsSinceEpochConverter().toJson(instance.expiration),
      'jti': instance.jwtId,
      'alg': instance.algorithm,
      'kid': instance.keyId,
      'typ': instance.encoding,
    };
