This commit is contained in:
@@ -68,41 +68,32 @@ const ResultPrototype = Object.freeze({
|
|||||||
[ResultTypeId]: ResultTypeId,
|
[ResultTypeId]: ResultTypeId,
|
||||||
|
|
||||||
[Equal.symbol](this: Result<any, any, any>, that: Result<any, any, any>): boolean {
|
[Equal.symbol](this: Result<any, any, any>, that: Result<any, any, any>): boolean {
|
||||||
if (this._tag !== that._tag)
|
if (this._tag !== that._tag || (this as Flags)._flag !== (that as Flags)._flag)
|
||||||
|
return false
|
||||||
|
if (hasRefreshingFlag(this) && !Equal.equals(this.progress, (that as Refreshing<any>).progress))
|
||||||
return false
|
return false
|
||||||
|
|
||||||
return Match.value(this).pipe(
|
return Match.value(this).pipe(
|
||||||
Match.tag("Initial", () => true),
|
Match.tag("Initial", () => true),
|
||||||
Match.tag("Running", self => Equal.equals(self.progress, (that as Running<any>).progress)),
|
Match.tag("Running", self => Equal.equals(self.progress, (that as Running<any>).progress)),
|
||||||
Match.tag("Success", self =>
|
Match.tag("Success", self => Equal.equals(self.value, (that as Success<any>).value)),
|
||||||
Equal.equals(self.value, (that as Success<any>).value) &&
|
Match.tag("Failure", self => Equal.equals(self.cause, (that as Failure<any, any>).cause)),
|
||||||
(isRefreshing(self) ? self.refreshing : false) === (isRefreshing(that) ? that.refreshing : false) &&
|
|
||||||
Equal.equals(isRefreshing(self) ? self.progress : undefined, isRefreshing(that) ? that.progress : undefined)
|
|
||||||
),
|
|
||||||
Match.tag("Failure", self =>
|
|
||||||
Equal.equals(self.cause, (that as Failure<any, any>).cause) &&
|
|
||||||
(isRefreshing(self) ? self.refreshing : false) === (isRefreshing(that) ? that.refreshing : false) &&
|
|
||||||
Equal.equals(isRefreshing(self) ? self.progress : undefined, isRefreshing(that) ? that.progress : undefined)
|
|
||||||
),
|
|
||||||
Match.exhaustive,
|
Match.exhaustive,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
[Hash.symbol](this: Result<any, any, any>): number {
|
[Hash.symbol](this: Result<any, any, any>): number {
|
||||||
const tagHash = Hash.string(this._tag)
|
return pipe(Hash.string(this._tag),
|
||||||
|
tagHash => Match.value(this).pipe(
|
||||||
return Match.value(this).pipe(
|
|
||||||
Match.tag("Initial", () => tagHash),
|
Match.tag("Initial", () => tagHash),
|
||||||
Match.tag("Running", self => Hash.combine(Hash.hash(self.progress))(tagHash)),
|
Match.tag("Running", self => Hash.combine(Hash.hash(self.progress))(tagHash)),
|
||||||
Match.tag("Success", self => pipe(tagHash,
|
Match.tag("Success", self => Hash.combine(Hash.hash(self.value))(tagHash)),
|
||||||
Hash.combine(Hash.hash(self.value)),
|
Match.tag("Failure", self => Hash.combine(Hash.hash(self.cause))(tagHash)),
|
||||||
Hash.combine(Hash.hash(isRefreshing(self) ? self.progress : undefined)),
|
|
||||||
)),
|
|
||||||
Match.tag("Failure", self => pipe(tagHash,
|
|
||||||
Hash.combine(Hash.hash(self.cause)),
|
|
||||||
Hash.combine(Hash.hash(isRefreshing(self) ? self.progress : undefined)),
|
|
||||||
)),
|
|
||||||
Match.exhaustive,
|
Match.exhaustive,
|
||||||
|
),
|
||||||
|
Hash.combine(Hash.hash((this as Flags)._flag)),
|
||||||
|
hash => hasRefreshingFlag(this)
|
||||||
|
? Hash.combine(Hash.hash(this.progress))(hash)
|
||||||
|
: hash,
|
||||||
Hash.cached(this),
|
Hash.cached(this),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
@@ -115,6 +106,7 @@ export const isInitial = (u: unknown): u is Initial => isResult(u) && u._tag ===
|
|||||||
export const isRunning = (u: unknown): u is Running<unknown> => isResult(u) && u._tag === "Running"
|
export const isRunning = (u: unknown): u is Running<unknown> => isResult(u) && u._tag === "Running"
|
||||||
export const isSuccess = (u: unknown): u is Success<unknown> => isResult(u) && u._tag === "Success"
|
export const isSuccess = (u: unknown): u is Success<unknown> => isResult(u) && u._tag === "Success"
|
||||||
export const isFailure = (u: unknown): u is Failure<unknown, unknown> => isResult(u) && u._tag === "Failure"
|
export const isFailure = (u: unknown): u is Failure<unknown, unknown> => isResult(u) && u._tag === "Failure"
|
||||||
|
export const hasFlag = (u: unknown): u is Flags => isResult(u) && Predicate.hasProperty(u, "_flag")
|
||||||
export const hasWillFetchFlag = (u: unknown): u is WillFetch => isResult(u) && Predicate.hasProperty(u, "_flag") && u._flag === "WillFetch"
|
export const hasWillFetchFlag = (u: unknown): u is WillFetch => isResult(u) && Predicate.hasProperty(u, "_flag") && u._flag === "WillFetch"
|
||||||
export const hasWillRefreshFlag = (u: unknown): u is WillRefresh => isResult(u) && Predicate.hasProperty(u, "_flag") && u._flag === "WillRefresh"
|
export const hasWillRefreshFlag = (u: unknown): u is WillRefresh => isResult(u) && Predicate.hasProperty(u, "_flag") && u._flag === "WillRefresh"
|
||||||
export const hasRefreshingFlag = (u: unknown): u is Refreshing<unknown> => isResult(u) && Predicate.hasProperty(u, "_flag") && u._flag === "Refreshing"
|
export const hasRefreshingFlag = (u: unknown): u is Refreshing<unknown> => isResult(u) && Predicate.hasProperty(u, "_flag") && u._flag === "Refreshing"
|
||||||
|
|||||||
Reference in New Issue
Block a user