#if !SILVERLIGHT && !XBOX
using System;
using System.IO;
using System.Text;
using ServiceStack.CacheAccess;
using ServiceStack.Common.Support;
using ServiceStack.Common.Web;
using ServiceStack.Text;
namespace ServiceStack.Common
{
public static class StreamExtensions
{
#if !MONOTOUCH
///
/// Compresses the specified text using the default compression method: Deflate
///
/// The text.
/// Type of the compression.
///
public static byte[] Compress(this string text, string compressionType)
{
if (compressionType == CompressionTypes.Deflate)
return Deflate(text);
if (compressionType == CompressionTypes.GZip)
return GZip(text);
throw new NotSupportedException(compressionType);
}
public static IDeflateProvider DeflateProvider = new NetDeflateProvider();
public static IGZipProvider GZipProvider = new NetGZipProvider();
///
/// Decompresses the specified gz buffer using the default compression method: Inflate
///
/// The gz buffer.
/// Type of the compression.
///
public static string Decompress(this byte[] gzBuffer, string compressionType)
{
if (compressionType == CompressionTypes.Deflate)
return Inflate(gzBuffer);
if (compressionType == CompressionTypes.GZip)
return GUnzip(gzBuffer);
throw new NotSupportedException(compressionType);
}
public static byte[] Deflate(this string text)
{
return DeflateProvider.Deflate(text);
}
public static string Inflate(this byte[] gzBuffer)
{
return DeflateProvider.Inflate(gzBuffer);
}
public static byte[] GZip(this string text)
{
return GZipProvider.GZip(text);
}
public static string GUnzip(this byte[] gzBuffer)
{
return GZipProvider.GUnzip(gzBuffer);
}
#endif
public static string ToUtf8String(this Stream stream)
{
if (stream == null) throw new ArgumentNullException("stream");
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
public static byte[] ToBytes(this Stream stream)
{
if (stream == null) throw new ArgumentNullException("stream");
return stream.ReadFully();
}
public static void Write(this Stream stream, string text)
{
var bytes = Encoding.ASCII.GetBytes(text);
stream.Write(bytes, 0, bytes.Length);
}
}
}
#endif