diff --git a/web/vibe/web/rest.d b/web/vibe/web/rest.d index e372e875b..e07e8b5f3 100644 --- a/web/vibe/web/rest.d +++ b/web/vibe/web/rest.d @@ -426,10 +426,20 @@ URLRouter registerRestInterface(TImpl)(URLRouter router, TImpl instance, RestInt alias R = ReturnType!ovrld; static if (isInstanceOf!(Collection, R)) { - auto ret = __traits(getMember, instance, fname)(R.ParentIDs.init); + typeof(__traits(getMember, instance, fname)(R.ParentIDs.init)) ret; + try ret = __traits(getMember, instance, fname)(R.ParentIDs.init); + catch (Exception e) { + logDiagnostic("Collection interface accessor %s.%s has thrown, skipping route registration: %s", TImpl.stringof, fname, e.msg); + continue; + } router.registerRestInterface!(R.Interface)(ret.m_interface, intf.subInterfaces[i].settings); } else { - auto ret = __traits(getMember, instance, fname)(); + typeof(__traits(getMember, instance, fname)()) ret; + try ret = __traits(getMember, instance, fname)(); + catch (Exception e) { + logDiagnostic("Interface accessor %s.%s has thrown, skipping route registration: %s", TImpl.stringof, fname, e.msg); + continue; + } router.registerRestInterface!R(ret, intf.subInterfaces[i].settings); } } diff --git a/web/vibe/web/rpc.d b/web/vibe/web/rpc.d index f24f74c86..3bd675413 100644 --- a/web/vibe/web/rpc.d +++ b/web/vibe/web/rpc.d @@ -183,6 +183,8 @@ struct WebRPCPeer(I) { WebRPCPeerImpl!(I, I, "") m_impl; } +@safe: + private this(WebRPCPeerImpl!(I, I, "") impl) { m_impl = impl;