summaryrefslogtreecommitdiff
path: root/src/adapter/vy_load_config.ml
blob: 66bbfb835c924724a739f6d04257a8bce2afe38c (plain)
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
(* Adapter load_config
 *)

open Vyos1x

let read_config filename =
    let ch = open_in filename in
    let s = really_input_string ch (in_channel_length ch) in
    let ct =
        try
            Ok (Parser.from_string s)
        with Vyos1x.Util.Syntax_error (opt, msg) ->
            begin
                match opt with
                | None -> Error msg
                | Some (line, pos) ->
                    let out = Printf.sprintf "%s line %d pos %d\n" msg line pos
                    in Error out
            end
    in
    close_in ch;
    ct

let read_configs f g =
    let l = read_config f in
    let r = read_config g in
    match l, r with
    | Ok left, Ok right -> Ok (left, right)
    | Error msg_l, Error msg_r -> Error (msg_l ^ msg_r)
    | Error msg_l, _ -> Error msg_l
    | _, Error msg_r -> Error msg_r


let args = []
let usage = Printf.sprintf "Usage: %s <config> <new config>" Sys.argv.(0)

let () = if Array.length Sys.argv <> 3 then (Arg.usage args usage; exit 1)

let () =
let left_name = Sys.argv.(1) in
let right_name = Sys.argv.(2) in
let read = read_configs left_name right_name in
let res =
    match read with
    | Ok (left, right) -> Vyos1x_adapter.load_config left right
    | Error msg -> msg
in Printf.printf "%s\n" res