Example #1
0
        private static IErlObject coreToErlObject(object o, ErlTypeOrder etp, bool strict)
        {
            if (o == null)
            {
                return(ErlAtom.Undefined);
            }

            var eh = strict ? ConvertErrorHandling.Throw : ConvertErrorHandling.ReturnDefault;

            var e = o as IErlObject;

            if (e != null)
            {
                return(e);
            }

            try
            {
                switch (etp)
                {
                case ErlTypeOrder.ErlObject:
                case ErlTypeOrder.ErlAtom:      return(new ErlAtom(o.ToString()));

                case ErlTypeOrder.ErlBinary:    return(new ErlBinary((byte[])o));

                case ErlTypeOrder.ErlBoolean:   return(new ErlBoolean(o.AsBool(handling: eh)));

                case ErlTypeOrder.ErlByte:      return(new ErlByte(o.AsByte(handling: eh)));

                case ErlTypeOrder.ErlDouble:    return(new ErlDouble(o.AsDouble(handling: eh)));

                case ErlTypeOrder.ErlLong:      return(new ErlLong(o.AsLong(handling: eh)));

                case ErlTypeOrder.ErlList:
                {
                    var list = new ErlList();
                    foreach (var item in (IEnumerable)o)
                    {
                        list.Add(item.ToErlObject());
                    }
                    return(list);
                }

                case ErlTypeOrder.ErlString:    return(new ErlString(o.AsString(handling: eh)));

                case ErlTypeOrder.ErlTuple:     return(new ErlTuple((object[])o));

                case ErlTypeOrder.ErlPid:
                case ErlTypeOrder.ErlPort:
                case ErlTypeOrder.ErlRef:
                case ErlTypeOrder.ErlVar:
                default:
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                throw new ErlException
                          (StringConsts.ERL_CANNOT_CONVERT_TYPES_ERROR, o.GetType().ToString(), etp.ToString());
            }
        }