static BsonValue ConvertToDate(BsonValue value, ConversionBSONType conversion) { if (value is BsonDateTime dateTimeValue) { return(ConvertDateTo(new DateTimeOffset(dateTimeValue.ToUniversalTime(), TimeSpan.Zero), conversion)); } if (value is BsonString stringValue) { return(ConvertDateTo(DateTimeOffset.Parse(stringValue.Value, CultureInfo.InvariantCulture), conversion)); } throw new CannotConvertValueUsingConversion(value, conversion); }
/// <inheritdoc /> public BsonValue Convert(BsonValue value, ConversionBSONType conversion) { switch (conversion) { case ConversionBSONType.None: return(value); case ConversionBSONType.DateAsDate: case ConversionBSONType.DateAsArray: case ConversionBSONType.DateAsDocument: case ConversionBSONType.DateAsString: case ConversionBSONType.DateAsInt64: return(ConvertToDate(value, conversion)); case ConversionBSONType.GuidAsStandardBinary: case ConversionBSONType.GuidAsCsharpLegacyBinary: case ConversionBSONType.GuidAsString: return(ConvertToGuid(value, conversion)); default: throw new UnknownBSONConversionType(conversion); } }
/// <summary> /// Initializes a new instance of the <see cref="UnknownBSONConversionType"/> class. /// </summary> /// <param name="conversion">The unknown conversion type.</param> public UnknownBSONConversionType(ConversionBSONType conversion) : base($"Cannot convert value using the BSON conversion {conversion}") { }
static BsonValue ConvertDateTo(DateTimeOffset value, ConversionBSONType conversion) => conversion switch {
/// <summary> /// Initializes a new instance of the <see cref="CannotConvertValueUsingConversion"/> class. /// </summary> /// <param name="value">The value to be converted.</param> /// <param name="conversion">The conversion to be applied.</param> public CannotConvertValueUsingConversion(BsonValue value, ConversionBSONType conversion) : base($"Cannot convert value '{value}' of type {value.BsonType} using conversion {conversion}") { }