This repository has been archived on 2023-02-02. You can view files and clone it, but cannot push or open issues or pull requests.
mfgames-nitride-cil/src/Nitride.Temporal/NitrideTemporalBuilderExtensions.cs

92 lines
3.3 KiB
C#
Raw Normal View History

2021-09-07 05:15:45 +00:00
using System;
2021-09-07 05:15:45 +00:00
using Autofac;
2021-09-07 05:15:45 +00:00
using Nitride.Commands;
using Nitride.Temporal.Cli;
2021-09-07 05:15:45 +00:00
using Serilog;
using Expires = Nitride.Temporal.Cli.ExpiresPipelineCommandOption;
namespace Nitride.Temporal;
public static class NitrideTemporalBuilderExtensions
2021-09-07 05:15:45 +00:00
{
/// <summary>
/// Extends the builder to allow for configuring the temporal
/// settings for generation.
/// </summary>
/// <param name="builder">The host builder being configured.</param>
/// <param name="callback">The callback to configure the clock.</param>
/// <returns>The builder passed in.</returns>
public static NitrideBuilder ConfigureClock(this NitrideBuilder builder, Action<Timekeeper> callback)
2021-09-07 05:15:45 +00:00
{
return builder.UseTemporal()
.ConfigureSite(
(_, scope) =>
{
Timekeeper? clock = scope.Resolve<Timekeeper>();
callback(clock);
});
}
2021-09-07 05:15:45 +00:00
public static NitrideBuilder UseTemporal(this NitrideBuilder builder)
{
return builder.ConfigureContainer(x => x.RegisterModule<NitrideTemporalModule>());
}
2021-09-07 05:15:45 +00:00
/// <summary>
/// Adds the "--date=XXXX-XX-XX" option into the pipeline commands.
/// </summary>
/// <param name="builder">The host builder being configured.</param>
/// <returns>The builder passed in.</returns>
public static NitrideBuilder WithClockFromOptions(this NitrideBuilder builder)
{
return builder.UseTemporal()
.ConfigureContainer(
x =>
{
x.RegisterType<DatePipelineCommandOption>().As<IPipelineCommandOption>();
});
}
2021-09-07 05:15:45 +00:00
/// <summary>
/// Adds the "--expire=XXXX" option into the pipeline commands where
/// "XXX" is a format like "5y" or "500000:00:00.0". This is parsed by
/// TimeSpanParser which gives an easy format.
/// </summary>
/// <param name="builder">The host builder being configured.</param>
/// <param name="defaultValue">The default expiration, if one is provided.</param>
/// <returns>The builder passed in.</returns>
public static NitrideBuilder WithExpiresFromOptions(this NitrideBuilder builder, TimeSpan defaultValue)
{
return WithExpiresFromOptions(builder, defaultValue.ToString());
}
2021-09-07 05:15:45 +00:00
/// <summary>
/// Adds the "--expire=XXXX" option into the pipeline commands where
/// "XXX" is a format like "5y" or "500000:00:00.0". This is parsed by
/// TimeSpanParser which gives an easy format.
/// </summary>
/// <param name="builder">The host builder being configured.</param>
/// <param name="defaultValue">The default expiration, if one is provided.</param>
/// <returns>The builder passed in.</returns>
public static NitrideBuilder WithExpiresFromOptions(this NitrideBuilder builder, string? defaultValue = null)
{
return builder.ConfigureContainer(
x =>
{
x.Register(
context =>
{
ILogger? logger = context.Resolve<ILogger>();
Timekeeper? clock = context.Resolve<Timekeeper>();
2021-09-07 05:15:45 +00:00
return new Expires(logger, clock, defaultValue);
})
.As<IPipelineCommandOption>();
});
2021-09-07 05:15:45 +00:00
}
}