Skip to content

Instantly share code, notes, and snippets.

@amis92
Forked from HaloFour/LoginResource.cs
Last active June 28, 2018 11:41
Show Gist options
  • Save amis92/5a0f3090a0e528a68123960efd2848a6 to your computer and use it in GitHub Desktop.
Save amis92/5a0f3090a0e528a68123960efd2848a6 to your computer and use it in GitHub Desktop.
Data Classes
using System;
using System.Collections.Generic;
/*
* public data class LoginResource
* {
* public string Username { get; }
* public string Password { get; }
* public bool RememberMe { get; } = true;
* }
*/
public sealed class LoginResource : IEquatable<LoginResource> {
public struct Builder
{
public string Username;
public string Password;
public bool RememberMe;
}
public static void Init(ref Builder builder)
{
builder.RememberMe = true;
}
private readonly Builder _builder;
public LoginResource(Builder builder) => _builder = builder;
public string Username => _builder.Username;
public string Password => _builder.Password;
public bool RememberMe => _builder.RememberMe;
public override bool Equals(object obj)
{
return Equals(obj as LoginResource);
}
public bool Equals(LoginResource that)
{
if (that is null) return false;
var eq1 = EqualityComparer<string>.Default;
return eq1.Equals(Username, that.Username)
&& eq1.Equals(this.Password, that.Password)
&& this.RememberMe == that.RememberMe;
}
public override int GetHashCode()
{
var eq1 = EqualityComparer<string>.Default;
var hashCode = -736459255;
hashCode = hashCode * -1521134295 + eq1.GetHashCode(Username);
hashCode = hashCode * -1521134295 + eq1.GetHashCode(Password);
hashCode = hashCode * -1521134295 + RememberMe.GetHashCode();
return hashCode;
}
public override string ToString()
{
return $"{{{nameof(Username)} = {Username}, {nameof(Password)} = {Password}, {nameof(RememberMe)} = {RememberMe}}}";
}
public static bool operator ==(LoginResource x, LoginResource y) {
return x is LoginResource @this && @this.Equals(y);
}
public static bool operator !=(LoginResource x, LoginResource y) {
return !(x == y);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment