public static ErrorCodes Validate <T>(T source, IPBSObject target) where T : Unit, IPBSObject
        {
            var validator = new PBSConnectionValidator(target);

            source.AcceptVisitor(validator);
            return(validator.Error);
        }
        public void CheckNewConnection(IPBSObject target, bool isOutGoing)
        {
            _pbsObject.IsFullyConstructed().ThrowIfFalse(ErrorCodes.ObjectNotFullyConstructed);

            if (isOutGoing)
            {
                GetOutConnectionsMax().ThrowIfLessOrEqual(OutConnections.Count, ErrorCodes.SourceOutOfOutConnections);

                PBSConnectionValidator.Validate(_pbsObject, target).ThrowIfError();
            }
            else
            {
                GetInConnectionsMax().ThrowIfLessOrEqual(InConnections.Count, ErrorCodes.TargetOutOfInConnections);
            }

            ContainsConnection(target).ThrowIfTrue(ErrorCodes.NodeAlreadyConnected);
        }