示例#1
0
        /// <summary>
        /// Registers specified encoder (marshaller)
        /// <para>Python.NET will pick suitable encoder/decoder registered first</para>
        /// </summary>
        public static void RegisterEncoder(IPyObjectEncoder encoder)
        {
            if (encoder == null)
            {
                throw new ArgumentNullException(nameof(encoder));
            }

            lock (encoders)
            {
                encoders.Add(encoder);
            }
        }
示例#2
0
        /// <summary>
        /// Gets specific instances of <see cref="IPyObjectEncoder"/>
        /// (potentially selecting one from a collection),
        /// that can encode the specified <paramref name="type"/>.
        /// </summary>
        public static IEnumerable <IPyObjectEncoder> GetEncoders(this IPyObjectEncoder decoder, Type type)
        {
            if (decoder is null)
            {
                throw new ArgumentNullException(nameof(decoder));
            }

            if (decoder is IEnumerable <IPyObjectEncoder> composite)
            {
                foreach (var nestedEncoder in composite)
                {
                    foreach (var match in nestedEncoder.GetEncoders(type))
                    {
                        yield return(match);
                    }
                }
            }
            else if (decoder.CanEncode(type))
            {
                yield return(decoder);
            }
        }