mirror of
https://github.com/chylex/Brotli-Builder.git
synced 2024-11-24 22:42:50 +01:00
47 lines
1.6 KiB
C#
47 lines
1.6 KiB
C#
using System;
|
|
using BrotliLib.Markers.Serialization.Reader;
|
|
using BrotliLib.Serialization;
|
|
using BrotliLib.Serialization.Reader;
|
|
|
|
namespace BrotliLib.Markers.Serialization{
|
|
/// <summary>
|
|
/// Extends <see cref="BitDeserializer{T, C}"/> with ability to use an <see cref="IMarkedBitReader"/> for deserialization.
|
|
/// </summary>
|
|
static class MarkedBitDeserializer{
|
|
public static BitDeserializer<T, C> Wrap<T, C>(Func<IMarkedBitReader, C, T> deserialize){
|
|
return (reader, context) => {
|
|
var markedReader = Cast(reader);
|
|
return deserialize(markedReader, context);
|
|
};
|
|
}
|
|
|
|
public static BitDeserializer<T, C> Title<T, C>(string title, Func<IMarkedBitReader, C, T> deserialize){
|
|
return (reader, context) => {
|
|
var markedReader = Cast(reader);
|
|
markedReader.MarkStart();
|
|
|
|
var result = deserialize(markedReader, context);
|
|
|
|
markedReader.MarkEndTitle(title);
|
|
return result;
|
|
};
|
|
}
|
|
|
|
public static BitDeserializer<T, C> Title<T, C>(Func<C, string> title, Func<IMarkedBitReader, C, T> deserialize){
|
|
return (reader, context) => {
|
|
var markedReader = Cast(reader);
|
|
markedReader.MarkStart();
|
|
|
|
var result = deserialize(markedReader, context);
|
|
|
|
markedReader.MarkEndTitle(title(context));
|
|
return result;
|
|
};
|
|
}
|
|
|
|
private static IMarkedBitReader Cast(IBitReader reader){
|
|
return reader as IMarkedBitReader ?? new MarkedBitReaderDummy(reader);
|
|
}
|
|
}
|
|
}
|