aliyun-net-credentials/Provider/RefreshResult.cs (71 lines of code) (raw):

namespace Aliyun.Credentials.Provider { public sealed class RefreshResult<T> { private readonly T value; private long staleTime; private long prefetchTime = long.MaxValue; public T Value { get { return value; } } public long StaleTime { get { return staleTime; } } public long PrefetchTime { get { return prefetchTime; } } public RefreshResult(T value, long staleTime) { this.value = value; this.staleTime = staleTime; } private RefreshResult(Builder builder) { this.value = builder.value; this.staleTime = builder.staleTime; this.prefetchTime = builder.prefetchTime; } public Builder ToBuilder() { return new Builder(this); } public override string ToString() { return string.Format("RefreshResult(value={0}, staleTime={1}, prefetchTime={2})", value, staleTime, prefetchTime); } public class Builder { internal T value; internal long staleTime = long.MaxValue; internal long prefetchTime = long.MaxValue; public Builder(RefreshResult<T> refreshResult) { this.value = refreshResult.Value; this.staleTime = refreshResult.StaleTime; this.prefetchTime = refreshResult.PrefetchTime; } internal Builder(T value) { this.value = value; } public Builder StaleTime(long staleTime) { this.staleTime = staleTime; return this; } public Builder PrefetchTime(long prefetchTime) { this.prefetchTime = prefetchTime; return this; } public RefreshResult<T> Build() { return new RefreshResult<T>(this); } } } }