Browse Source

Added docstrings for Cacheable

pull/395/head
Christopher F Sindre G. Langhus 8 years ago
parent
commit
daf0ac9347
1 changed files with 25 additions and 0 deletions
  1. +25
    -0
      src/Discord.Net.Core/Utils/Cacheable.cs

+ 25
- 0
src/Discord.Net.Core/Utils/Cacheable.cs View File

@@ -4,12 +4,29 @@ using System.Threading.Tasks;


namespace Discord namespace Discord
{ {
/// <summary>
/// Contains an entity that may be cached.
/// </summary>
/// <typeparam name="TEntity">The type of entity that is cached</typeparam>
/// <typeparam name="TId">The type of this entity's ID</typeparam>
public struct Cacheable<TEntity, TId> public struct Cacheable<TEntity, TId>
where TEntity : IEntity<TId> where TEntity : IEntity<TId>
where TId : IEquatable<TId> where TId : IEquatable<TId>
{ {
/// <summary>
/// Is this entity cached?
/// </summary>
public bool HasValue => !EqualityComparer<TEntity>.Default.Equals(Value, default(TEntity)); public bool HasValue => !EqualityComparer<TEntity>.Default.Equals(Value, default(TEntity));
/// <summary>
/// The ID of this entity.
/// </summary>
public ulong Id { get; } public ulong Id { get; }
/// <summary>
/// The entity, if it could be pulled from cache.
/// </summary>
/// <remarks>
/// This value is not guaranteed to be set; in cases where the entity cannot be pulled from cache, it is null.
/// </remarks>
public TEntity Value { get; } public TEntity Value { get; }
private Func<Task<TEntity>> DownloadFunc { get; } private Func<Task<TEntity>> DownloadFunc { get; }


@@ -20,11 +37,19 @@ namespace Discord
DownloadFunc = downloadFunc; DownloadFunc = downloadFunc;
} }


/// <summary>
/// Downloads this entity to cache.
/// </summary>
/// <returns>An awaitable Task containing the downloaded entity.</returns>
public async Task<TEntity> DownloadAsync() public async Task<TEntity> DownloadAsync()
{ {
return await DownloadFunc(); return await DownloadFunc();
} }


/// <summary>
/// Returns the cached entity if it exists; otherwise downloads it.
/// </summary>
/// <returns>An awaitable Task containing a cached or downloaded entity.</returns>
public async Task<TEntity> GetOrDownloadAsync() => HasValue ? Value : await DownloadAsync(); public async Task<TEntity> GetOrDownloadAsync() => HasValue ? Value : await DownloadAsync();
} }
} }

Loading…
Cancel
Save