import { User } from "../model/user";
import { SpecificationOf } from "../specification/model";
import { Specification } from "../specification/specification";
interface DistributionRule {
    specification: Specification;
    feeds: Specification[];
    user: Specification | null;
}
declare class ShareTarget<T, U> {
    private specification;
    private rules;
    constructor(specification: Specification, rules: DistributionRule[]);
    with(user: SpecificationOf<T, User>): DistributionRules;
    withEveryone(): DistributionRules;
}
export declare class DistributionRules {
    rules: DistributionRule[];
    static empty: DistributionRules;
    constructor(rules: DistributionRule[]);
    with(rules: (r: DistributionRules) => DistributionRules): DistributionRules;
    share<T, U>(specification: SpecificationOf<T, U>): ShareTarget<T, U>;
    saveToDescription(): string;
    merge(distributionRules2: DistributionRules): DistributionRules;
    static combine(distributionRules: DistributionRules, specification: Specification, user: Specification | null): DistributionRules;
    static loadFromDescription(description: string): DistributionRules;
}
export declare function describeDistributionRules(rules: (r: DistributionRules) => DistributionRules): string;
export {};
//# sourceMappingURL=distribution-rules.d.ts.map