github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library@v0.2.0/FileIO/externs.go (about)

     1  package FileIO
     2  
     3  import (
     4  	"io/ioutil"
     5  	os "os"
     6  	"path/filepath"
     7  
     8  	"github.com/dafny-lang/DafnyRuntimeGo/v4/dafny"
     9  	_dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny"
    10  )
    11  
    12  // TODO: Drop this once we fix the DafnyLibraries.FileIO extern
    13  var m_DafnyLibraries struct {
    14  	FileIO CompanionStruct_Default___
    15  }
    16  
    17  func (_static CompanionStruct_Default___) INTERNAL_ReadBytesFromFile(path _dafny.Sequence) (isError bool, bytesRead _dafny.Sequence, errorMsg _dafny.Sequence) {
    18  	p := func() string {
    19  		var s string
    20  		for i := _dafny.Iterate(path); ; {
    21  			val, notEndOfSequence := i()
    22  			if notEndOfSequence {
    23  				s = s + string(val.(_dafny.Char))
    24  			} else {
    25  				return s
    26  			}
    27  		}
    28  	}()
    29  
    30  	dat, err := ioutil.ReadFile(p)
    31  	if err != nil {
    32  		return true, _dafny.EmptySeq, _dafny.SeqOfChars([]dafny.Char(err.Error())...)
    33  	}
    34  	datAsSequence := _dafny.SeqOfBytes(dat)
    35  	return false, datAsSequence, _dafny.EmptySeq
    36  }
    37  
    38  func (_static CompanionStruct_Default___) INTERNAL_WriteBytesToFile(path _dafny.Sequence, bytes _dafny.Sequence) (isError bool, errorMsg _dafny.Sequence) {
    39  	p := func() string {
    40  		var s string
    41  		for i := _dafny.Iterate(path); ; {
    42  			val, notEndOfSequence := i()
    43  			if notEndOfSequence {
    44  				s = s + string(val.(_dafny.Char))
    45  			} else {
    46  				return s
    47  			}
    48  		}
    49  	}()
    50  
    51  	// Create directories
    52  	os.MkdirAll(filepath.Dir(p), os.ModePerm)
    53  	bytesArray := _dafny.ToByteArray(bytes)
    54  	err := ioutil.WriteFile(p, bytesArray, 0644)
    55  	if err != nil {
    56  		return true, _dafny.SeqOfChars([]dafny.Char(err.Error())...)
    57  	}
    58  	return false, _dafny.EmptySeq
    59  }
    60  
    61  func (_static CompanionStruct_Default___) INTERNAL_AppendBytesToFile(path _dafny.Sequence, bytes _dafny.Sequence) (isError bool, errorMsg _dafny.Sequence) {
    62  	p := func() string {
    63  		var s string
    64  		for i := _dafny.Iterate(path); ; {
    65  			val, notEndOfSequence := i()
    66  			if notEndOfSequence {
    67  				s = s + string(val.(_dafny.Char))
    68  			} else {
    69  				return s
    70  			}
    71  		}
    72  	}()
    73  
    74  	// Create directories
    75  	err := os.MkdirAll(filepath.Dir(p), os.ModePerm)
    76  	if err != nil {
    77  		return true, _dafny.SeqOfChars([]dafny.Char(err.Error())...)
    78  	}
    79  
    80  	bytesArray := _dafny.ToByteArray(bytes)
    81  
    82  	f, err := os.OpenFile(p, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    83  	if err != nil {
    84  		return true, _dafny.SeqOfChars([]dafny.Char(err.Error())...)
    85  	}
    86  
    87  	if _, err := f.Write(bytesArray); err != nil {
    88  		return true, _dafny.SeqOfChars([]dafny.Char(err.Error())...)
    89  	}
    90  
    91  	if err := f.Close(); err != nil {
    92  		return true, _dafny.SeqOfChars([]dafny.Char(err.Error())...)
    93  	}
    94  
    95  	return false, _dafny.EmptySeq
    96  }