1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// lib.rs
// Copyright 2016 Alexander Altman
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

extern crate diff;
extern crate itertools;
extern crate colored;
extern crate libloading;

#[derive(Eq,Ord,PartialEq,PartialOrd,Hash,Clone,Copy,Debug)]
pub enum Provenance {
  Old,
  Shared,
  New,
}
use Provenance::*;

impl<'a> PartialEq<Provenance> for &'a Provenance {
  fn eq(&self, other: &Provenance) -> bool { (**self as Provenance) == (*other as Provenance) }
}

impl<'a> PartialEq<&'a Provenance> for Provenance {
  fn eq(&self, other: &&'a Provenance) -> bool { (*self as Provenance) == (**other as Provenance) }
}

impl Provenance {
  pub fn is_old(&self) -> bool { self != New }

  pub fn is_old_only(&self) -> bool { self == Old }

  pub fn is_new(&self) -> bool { self != Old }

  pub fn is_new_only(&self) -> bool { self == New }

  pub fn is_shared(&self) -> bool { self == Shared }

  pub fn is_unshared(&self) -> bool { self != Shared }
}

pub trait ExtensionPoint {
  fn name(&self) -> String;

  fn description(&self) -> String;
}

impl<L: ExtensionPoint + ?Sized> ExtensionPoint for Box<L> {
  fn name(&self) -> String { self.as_ref().name() }

  fn description(&self) -> String { self.as_ref().description() }
}

mod language;
pub use language::*;

mod presentation;
pub use presentation::*;