-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUpkeepLine.cs
More file actions
28 lines (25 loc) · 1.26 KB
/
Copy pathUpkeepLine.cs
File metadata and controls
28 lines (25 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System.Globalization;
using RustPlusBot.Features.ItemData.Data;
using RustPlusBot.Features.ItemData.Naming;
namespace RustPlusBot.Features.Commands.Formatting;
/// <summary>Formats the one-line upkeep-cost reply.</summary>
internal static class UpkeepLine
{
/// <summary>Formats the per-resource upkeep cost for a building block.</summary>
/// <param name="item">The item (must have non-null <see cref="ItemRecord.Upkeep"/>).</param>
/// <param name="names">Resolves resource item ids to names.</param>
public static string Format(ItemRecord item, IItemNameResolver names)
{
ArgumentNullException.ThrowIfNull(item);
ArgumentNullException.ThrowIfNull(names);
ArgumentNullException.ThrowIfNull(item.Upkeep);
var parts = item.Upkeep.Entries.Select(e =>
{
var quantity = e.QuantityMin == e.QuantityMax
? e.QuantityMin.ToString(CultureInfo.InvariantCulture)
: string.Create(CultureInfo.InvariantCulture, $"{e.QuantityMin}–{e.QuantityMax}");
return string.Create(CultureInfo.InvariantCulture, $"{quantity} {names.Resolve(e.ItemId)}");
});
return string.Create(CultureInfo.InvariantCulture, $"{item.Name} upkeep: {string.Join(", ", parts)}");
}
}