001/*
002 * PermissionsEx
003 * Copyright (C) zml and PermissionsEx contributors
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *    http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package ca.stellardrift.permissionsex.impl.context;
018
019import ca.stellardrift.permissionsex.context.ContextDefinition;
020import ca.stellardrift.permissionsex.impl.util.IpSet;
021import org.checkerframework.checker.nullness.qual.Nullable;
022
023/**
024 * An abstract context definiton for context types that use a {@link IpSet}
025 */
026public abstract class IpSetContextDefinition extends ContextDefinition<IpSet> {
027
028    protected IpSetContextDefinition(final String name) {
029        super(name);
030    }
031
032    @Override
033    public final String serialize(final IpSet canonicalValue) {
034        return canonicalValue.toString();
035    }
036
037    @Override
038    public @Nullable IpSet deserialize(final String userValue) {
039        try {
040            return IpSet.fromCidr(userValue);
041        } catch (final IllegalArgumentException ex) {
042            return null;
043        }
044    }
045
046    @Override
047    public boolean matches(final IpSet ownVal, final IpSet testVal) {
048        return ownVal.contains(testVal);
049    }
050}