blob: 1d758ca935d7c698cfcf039fbb8b8a3a3990f626 [file] [log] [blame]
Jan Tattermuscha7fff862015-02-13 11:08:08 -08001#region Copyright notice and license
2
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003// Copyright 2015 gRPC authors.
Craig Tiller190d3602015-02-18 09:23:38 -08004//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
Craig Tiller190d3602015-02-18 09:23:38 -08008//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009// http://www.apache.org/licenses/LICENSE-2.0
Craig Tiller190d3602015-02-18 09:23:38 -080010//
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
Jan Tattermuscha7fff862015-02-13 11:08:08 -080016
17#endregion
18
Jan Tattermusch15111f52015-02-05 18:15:14 -080019using System;
Jan Tattermuschc0b37212015-03-13 08:35:41 -070020using Grpc.Core.Utils;
Jan Tattermusch15111f52015-02-05 18:15:14 -080021
Jan Tattermusch30868622015-02-19 09:22:33 -080022namespace Grpc.Core
Jan Tattermusch15111f52015-02-05 18:15:14 -080023{
24 /// <summary>
Jan Tattermusch66eb18d2015-08-09 20:03:24 -070025 /// Encapsulates the logic for serializing and deserializing messages.
Jan Tattermusch15111f52015-02-05 18:15:14 -080026 /// </summary>
Jan Tattermusch67c45872015-08-27 18:12:39 -070027 public class Marshaller<T>
Jan Tattermusch15111f52015-02-05 18:15:14 -080028 {
Jan Tattermusch075dde42015-03-11 18:21:00 -070029 readonly Func<T, byte[]> serializer;
30 readonly Func<byte[], T> deserializer;
Jan Tattermusch15111f52015-02-05 18:15:14 -080031
Jan Tattermusch66eb18d2015-08-09 20:03:24 -070032 /// <summary>
33 /// Initializes a new marshaller.
34 /// </summary>
35 /// <param name="serializer">Function that will be used to serialize messages.</param>
36 /// <param name="deserializer">Function that will be used to deserialize messages.</param>
Jan Tattermusch15111f52015-02-05 18:15:14 -080037 public Marshaller(Func<T, byte[]> serializer, Func<byte[], T> deserializer)
38 {
Jan Tattermusch7a3ee6a2016-02-18 10:36:02 -080039 this.serializer = GrpcPreconditions.CheckNotNull(serializer, "serializer");
40 this.deserializer = GrpcPreconditions.CheckNotNull(deserializer, "deserializer");
Jan Tattermusch15111f52015-02-05 18:15:14 -080041 }
42
Jan Tattermusch66eb18d2015-08-09 20:03:24 -070043 /// <summary>
44 /// Gets the serializer function.
45 /// </summary>
Jan Tattermusch15111f52015-02-05 18:15:14 -080046 public Func<T, byte[]> Serializer
47 {
48 get
49 {
50 return this.serializer;
51 }
52 }
53
Jan Tattermusch66eb18d2015-08-09 20:03:24 -070054 /// <summary>
55 /// Gets the deserializer function.
56 /// </summary>
Jan Tattermusch15111f52015-02-05 18:15:14 -080057 public Func<byte[], T> Deserializer
58 {
59 get
60 {
61 return this.deserializer;
62 }
63 }
64 }
65
Jan Tattermusch286975f2015-03-12 14:04:36 -070066 /// <summary>
67 /// Utilities for creating marshallers.
68 /// </summary>
Jan Tattermusch075dde42015-03-11 18:21:00 -070069 public static class Marshallers
70 {
Jan Tattermusch66eb18d2015-08-09 20:03:24 -070071 /// <summary>
72 /// Creates a marshaller from specified serializer and deserializer.
73 /// </summary>
Jan Tattermusch075dde42015-03-11 18:21:00 -070074 public static Marshaller<T> Create<T>(Func<T, byte[]> serializer, Func<byte[], T> deserializer)
Jan Tattermusch15111f52015-02-05 18:15:14 -080075 {
76 return new Marshaller<T>(serializer, deserializer);
77 }
78
Jan Tattermusch66eb18d2015-08-09 20:03:24 -070079 /// <summary>
80 /// Returns a marshaller for <c>string</c> type. This is useful for testing.
81 /// </summary>
Jan Tattermusch15111f52015-02-05 18:15:14 -080082 public static Marshaller<string> StringMarshaller
83 {
84 get
85 {
Craig Tiller190d3602015-02-18 09:23:38 -080086 return new Marshaller<string>(System.Text.Encoding.UTF8.GetBytes,
Jan Tattermusch15111f52015-02-05 18:15:14 -080087 System.Text.Encoding.UTF8.GetString);
88 }
89 }
Jan Tattermusch15111f52015-02-05 18:15:14 -080090 }
91}